【问题标题】:rails 3 form throws undefined method `model_name'rails 3 form抛出未定义的方法`model_name'
【发布时间】:2011-07-14 14:34:50
【问题描述】:

userhome_controller:

  def edit_reviewer_email
    @user = User.find(params[:id])
  end

edit_reviewer_email:

<div class="pagetop center">
    <%= form_for @user, update_reviewer_email_userhome_path(@user) do |f| %>
        <%= f.label :email %><br />
        <%= f.text_field :email, :size => 1 %>
        <%= f.submit %>
    <% end %>
</div>

错误:

undefined method `stringify_keys' for "/userhome/18/update_reviewer_email":String

当模型通过不同的控制器访问时,我应该使用 form_tag 吗?

如果您知道的话,我正在寻找涵盖各种形式的 rails 3 教程。 谢谢!

【问题讨论】:

  • 请在“未定义方法”错误下方发布完整的回溯。

标签: ruby-on-rails-3 forms models


【解决方案1】:

您的控制器需要将其请求限制为单个记录(您可以使用find):

@user = User.find(params[:id])

或者,如果您想坚持使用 where 声明:

@user = User.where("id = ?", params[:id]).first

【讨论】:

  • 当我将其更改为 find vs where 我得到“无法找到所有具有 ID (id = ?, 18) 的用户(找到 1 个结果,但正在寻找 2 个)”
  • 你能用你尝试过的确切的新代码和确切的错误来更新你的问题吗?
  • 当你使用find时,你应该直接传入params[:id](就像我的回答一样),而不是"id = ?", params[:id]声明。
  • 另外,Rails 的find(id) 方法已经包含防止 SQL 注入的对策。
  • 学到了两件事。谢谢你的cmets。现在我收到另一个错误。以上更新。
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多