2014-02-24 27 views
0

错误尝试更新用户属性以包含Songkick ID。无法在Rails中更新单个属性,使用params []

在视图中,我有我的形式帮助下面的代码:

<%= 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="https://stackoverflow.com/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控制台中检查用户时,songkickid不是。

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

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

    redirect_to @user 
else 
    render 'edit' 
end 
end 

如果更改PARAMS [:songkickID]手动为一个有效的ID Songkick的,它的工作原理,所以我猜测故障是与PARAMS [:songkickID]?或者与文本字段?或两者?

+0

你应该做的PARAMS [:用户] [:songkickID],您的params为嵌套在用户,因为你的资源是用户.. –

+0

和你更新的方式也是错误的你应该做update_attributes(songkickID:params [:user] [:songkickID]),并且不要忘记如果你正在使用rails4允许params –

+0

感谢你的提示,评论和它的工作,我会把它作为答案!我不需要改变任何权限,这是否意味着我应该检查,看看我的参数是否强大? – Amir

回答

0

因为你的params为嵌套在“用户”,所以你应该做的

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