【问题标题】:Failing to update single attribute in Rails, error with params[]无法更新 Rails 中的单个属性,参数错误 []
【发布时间】: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="&#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 不是 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


【解决方案1】:

因为您的参数嵌套在“用户”中,所以您应该这样做

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多