未定义的方法`stringify_keys' for" 4":String

时间:2015-02-06 09:34:26

标签: ruby-on-rails

好的,这似乎是一个非常常见的问题,但在线查看我似乎无法找到解决方案。

当尝试使用下面的代码更新对象(产品)时,我得到未定义的方法`stringify_keys' for" 4":String 由Rails抛回NoMethod错误页面。

这是代码,看看你是否可以指出我做错了什么:

产品控制器

  def update
  @product = Product.find(params[:id])

  if @product.update(params[:id])
    redirect_to @product
  else
    render 'edit'
  end
end

编辑表单查看:

<%= form_for(@product.id) do |f| %>

  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :price %><br>
    <%= f.text_field :price %>
  </div>
  <div class="field">
    <%= f.label :descriptio %><br>
    <%= f.text_field :description %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我希望我能让它发挥作用!

2 个答案:

答案 0 :(得分:0)

此片段不正确。

def update
  @product = Product.find(params[:id])

  if @product.update(params[:id])
    redirect_to @product
  else
    render 'edit'
  end
end

update需要Hash个属性,您传递的是Fixnum ID。它应该是

@product.update(params[:product])

理想情况下,您还应根据强参数功能的要求过滤输入。

@product.update(product_params)

def product_params
  params.require(:product).permit(...)
end

答案 1 :(得分:0)

有几件事是错的。西蒙在他的回答中提到了一个。

如果确实如您所发布的那样,则您的编辑表单不正确。

<%= form_for(@product) do |f| %>   <-- no .id

表单用于产品模型的实例,而不是FixNum。

&lt;%end%&gt;在您的表格之后 - 关闭该表格。

描述标签不会与文字字段匹配。

也许你打算:

<%= form_for(@product) do |f| %>
  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :price %><br>
    <%= f.text_field :price %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_field :description %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>