Archive

Posts Tagged ‘view’

Railsのform_forでの注意

August 4th, 2009 No comments
# view
<% form_for :hoge, :url => {:action => :update} do |f| %>
  <% f.hidden_field :id, {:value => @hoge.id} %>
  <% f.text_field :name, {:value => @hoge.name} %>
  <% f.submit %>
<% end %>
# controller
def update
  if params[:hoge]
    hoge = Hoge.find_by_id(params[:hoge][:id])
    hoge.attributes = params[:hoge]
    hoge.save!
  end
end

のような書き方をするとうまく保存されません
WARNING: Can’t mass-assign these protected attributes: id
のような警告をlogに吐きます
どうやらidは上書きも認められてないようです
hidden_fieldではなく、form_forの引数として渡すとうまく行きます

# view
<% form_for :hoge, :url => {:action => :update, :id => @hoge.id} do |f| %>
  <% # f.hidden_field :id, {:value => @hoge.id} %>
  <% f.text_field :name, {:value => @hoge.name} %>
  <% f.submit %>
<% end %>
# controller
def update
  if params[:hoge]
    # hoge = Hoge.find_by_id(params[:hoge][:id])
    hoge = Hoge.find_by_id(params[:id])
    hoge.attributes = params[:hoge]
    hoge.save!
  end
end

これでうまいこと更新出来ます

Tags: ,