无法更新Rails中的单个属性,使用params []时出错

时间:2014-02-24 18:47:49

标签: ruby-on-rails forms rails-activerecord

尝试更新用户属性以包含Songkick ID。

在视图中,我的表单助手有以下代码:

<%= form_for(@user) do |f| %>
  <%= render 'shared/error_messages' %>

  <%= f.text_field :songkickID %>

  <%= f.submit "Songkick ID", :type => :image, :src => image_path("songkicklogo.png"), id: "skLogo" %>
<% end %>

在页面源代码中,我看到了:

<form accept-charset="UTF-8" action="/users/1" class="edit_user" id="edit_user_1" method="post">
<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" />
<input name="_method" type="hidden" value="patch" /><input name="authenticity_token" type="hidden" value="asdal;skalskd;laskd;asdj=" />
</div>

  <input id="user_songkickID" name="user[songkickID]" type="text" />

  <input id="skLogo" name="commit" src="/assets/songkicklogo.png" type="image" value="Songkick ID" />

因此我认为应该通过文本字段更新用户属性。但是,当我在Rails控制台中检查用户时,歌曲不是nil。

用户控制器中的更新方法如下:

def update
@user = User.find(params[:id])
if @user.update_attribute(:songkickID, params[:songkickID])

  redirect_to @user
else
  render 'edit'
end
end

如果我将params [:songkickID]手动更改为有效的Songkick ID,它会起作用,所以我猜测故障是用那个参数[:songkickID]?还是与文本字段?或两者兼而有之?

1 个答案:

答案 0 :(得分:0)

因为你的params嵌套在“user”中,所以你应该

@user.update_attributes(songkickID: params[:user][:songkickID])