【发布时间】:2014-02-25 03:24:34
【问题描述】:
尝试更新用户属性以包含 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="✓" />
<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 不是 nil。
User控制器中的更新方法如下:
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,它可以工作,所以我猜是那个 params[:songkickID] 的问题?还是使用文本字段?还是两者兼有?
【问题讨论】:
-
你应该做 params[:user][:songkickID],你的 params 嵌套在 user 里面,因为你的资源是 user..
-
而且你更新的方式也是错误的,你应该做 update_attributes(songkickID: params[:user][:songkickID]),如果你使用 rails4,别忘了允许 params
-
谢谢你,更新了你的第二条评论中的链接,它有效,我会把它设置为答案!我不需要更改任何权限,这是否意味着我应该检查我的参数是否强大?
-
我认为你在我的第二条评论中映射你的参数的方式,你不需要允许它......我不知道为什么但你不需要这样做,我已经问过相关问题见stackoverflow.com/questions/21928335/…,但还没有找到答案
-
很公平,我如何将您的评论设置为答案?
标签: ruby-on-rails forms rails-activerecord