我在 Rails 3.2 中有一个产品树,并希望有一个添加/删除功能,以便用户可以添加新的子产品或删除产品的现有子产品。我使用祖先 gem 生成树,对于 Product 1,它可能如下所示:
Product 1
add | remove
Product 2
add | remove
Product 3
add | remove
在部分 _product.html.erb 中,我添加了添加和删除链接,这适用于添加功能,但我无法使删除链接正常工作:
<span><%= product.name.capitalize %></span>
<%= link_to "Add", new_product_path(parent_id: product) %> |
<%= link_to "Remove", {parent_id: nil}, method: :update %>
单击“删除”时,我想将要删除的产品的 parent_id 更新为 nil,但上面的 link_to 似乎不起作用。我得到一个:没有路由匹配 [POST]“/products/1/edit”路由错误。在我的 product_controller 中,我有:
def update
if @product.update_attributes(params[:product])
flash[:success] = "Product updated"
redirect_to @product
else
render 'edit'
end
end
我究竟做错了什么?
编辑:
我尝试method: put
改用:
<%= link_to "Remove", {parent_id: nil}, method: :put %>
No route matches [PUT] "/products/1/edit"
然后我在单击链接时收到错误消息。
我现在可以使用表单更改/删除父级,这根本不是我想要的,但无论如何:
<%= form_for @product do |f| %>
<%= f.label :parent_id %>
<%= f.text_field :parent_id %>
<%= f.submit "Update", class: "btn" %>
<% end %>
是否可以自动将 parent_id: nil 传递到表单中,以便当您点击更新时,它会设置 parent_id: nil (没有文本字段,只是一个按钮)?