Rails 3.2 に製品のツリーがあり、ユーザーが新しい子製品を追加したり、製品の既存の子製品を削除したりできるように、追加/削除機能が必要です。祖先ジェムを使用してツリーを生成します。製品 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 が設定されるようにすることは可能でしょうか (ボタンだけのテキスト フィールドはありません)。