trackers_controller.show のショー erb に「削除」ボタンがあります。
<%= form_for :user_tracker, :url => user_tracker_path,:method => :delete do |f| %>
<%= f.hidden_field :tracker_id, :value => @tracker.id %>
<%= f.submit :save, :value => 'Remove' %>
<% end %>
これは正常に動作し、user_trackers_controller.destroy を呼び出します
ユーザー モデルは次のようになります。
has_many :user_trackers
has_many :trackers, :through => :user_trackers
まったく同じボタンを別の erb に配置すると、次のエラーが発生します。
No route matches {:action=>"show", :controller=>"user_trackers"}
:html => {:method => :delete } のようないくつかの異なる組み合わせがあります
こうやってみると
<% current_user.user_trackers.each do |user_tracker| %>
<%= user_tracker.tracker %>
<%= form_for user_tracker, :method => :delete do |f| %>
<%= f.submit :delete, :value => 'Remove' %>
<% end %>
同じルーティングエラーが発生します
ルートは次のとおりです。
user_trackers GET /user_trackers(.:format) user_trackers#index
POST /user_trackers(.:format) user_trackers#create
new_user_tracker GET /user_trackers/new(.:format) user_trackers#new
edit_user_tracker GET /user_trackers/:id/edit(.:format) user_trackers#edit
user_tracker GET /user_trackers/:id(.:format) user_trackers#show
PUT /user_trackers/:id(.:format) user_trackers#update
DELETE /user_trackers/:id(.:format) user_trackers#destroy
理解できません。関連のない erb にいるときに、これが破壊であると認識されないのはなぜですか?
編集: これは機能しているようですが、html は edit_user_tracker_7 のような ID とクラスを生成しますが、それを削除するための JavaScript も生成するため、まだ何か問題があるようです:
<%= form_for user_tracker, :url => user_tracker_path(user_tracker), :method => :delete do |f| %>
<%= f.hidden_field :tracker_id, :value => user_tracker.tracker_id %>
<%= f.submit :delete, :value => 'Remove from my portfolio' %>
<% end %>