好的,这似乎是一个非常常见的问题,但在线查看我似乎无法找到解决方案。
当尝试使用下面的代码更新对象(产品)时,我得到未定义的方法`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 %>
我希望我能让它发挥作用!
答案 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 %>