0

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 %>
4

1 に答える 1

0

最初の行では

:url => user_tracker_path(@user)

それはバグではありません。彼は誰を削除するかを知る必要があるだけです:)したがって、IDが必要です(RESTで)。また:method:html

:html => { :method => :delete }

また

html: { method: "delete" }

1.9+表記あり。

full form_for

user_tracker_path(@user), :html => {:method => :delete} do |f| %>

ofc あなたのケース@userが current_user の場合、それを交換する必要があります:)

タイプミスと英語で申し訳ありませんが、私はネイティブではありません:)乾杯!

于 2012-04-29T14:40:36.763 に答える