ユーザーとマテリアルの 2 つのモデルがあります。ユーザーは素材をお気に入りにすることができます。私は関係を設定しており、お気に入りにするためのコードは正常に機能しますが、お気に入りから外すためのコードを正しく取得できないようです。お気に入りを無効にするための次のコードがあります。
マテリアル コントローラー(unfavorite form がある show アクション内)
@favourite = Favmat.where(:user_id => current_user.id, :material_id => @material.id)
注: このコードを使用して、ビューに表示するボタンを決定します。レコードが存在すると仮定すると、次のようになります。
意見
<%= form_for @favourite, :method => :delete do |f| %>
<%= f.submit "Unfavourite" %>
<% end %>
問題はここにあるようです。私が何をしても、favmats コントローラーの destroy アクションへの作業ルートが得られないようです。代わりに form_tag を使用してみましたが、機能しない非常に奇妙なルートが得られます。
お気に入りコントローラー
def destroy
Favmat.find(params[:id]).destroy
respond_to do |format|
format.html { redirect_to @material }
format.js
end
end
アップデート
また、フォームの代わりに link_to を使用してみました。コードは次のとおりです。
<%= link_to "Unfavourite", favmat_path, method: "delete" %>
奇妙なことに、これの html は favmat オブジェクトではなく、マテリアルから favmat id を取得します。そこに favmat オブジェクト ID を取得する方法がわかりません。何も機能していないようです。