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
これでうまいこと更新出来ます