2016-09-25 9 views
0

I持っている3台のような、userarticlesaved_article削除子テーブルのデータ

ユーザー

has_many : saved_articles, dependent: :destroy 

has_many : saved_articles, dependent: :destroy 

SavedArticle

id | article_id | user_id | #-> Table 

belongs_to :user 
belongs_to :article 

SavedArticle完全な成功を作成するが、私は削除しようとすると問題があり、

マイ削除アクション:

def remove 
    current_user.saved_articles.find(params[:id]).destroy 
    redirect_to home_path 
end 

フォームを削除します。

上部のコードに基づいて表示
<%= form_for :remove, url: home_remove_path(id: current_user.saved_articles.id), method: :delete, remote: true do |f| %> 
    <%= f.button 'Remove'.html_safe, data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Deleting..."}, :class => 'btn btn-default btn-delete' %> 
<% end %> 

#SavedArticle :: ActiveRecord_Associations_CollectionProxyの未定義メソッド `id ':0x00000016f

私は以下のようにデバッグddd90 :

<%= debug current_user.saved_articles %>は、テーブル内のすべての属性を示します。

私の質問は、saved_articlesテーブルから自分の特定の属性を削除する方法です。

おかげ

+0

current_user.saved_articlesこれを設定していることを忘れないでください

def destroy @saved_article = SavedArticle.find(params[:id]) @saved_article.destroy redirect_to ..., notice: ... end

が続いsaved_article
<%= link_to 'Delete', @saved_article, method: :delete, data: { confirm: 'Are you sure?' }

を削除するには、あなたのビューにリンクを追加するには、destroyアクションでこれを置きます記事の配列のようなコレクションのプロキシを与える...コレクションのIDを取得することはできませんので、あなたはエラー –

+0

を取得し、IDにアクセスする方法? –

+0

単純な理想的な方法 'home_remove_path(2)'はidをコントローラメソッドに送信します。ここで2はidです。フォームが呼び出されたときに、ビュー自体からIDを取得してください(2のように)harodedしないでください –

答えて

0

フォームは、上記のリンクでは、ちょうどあなたのビューに次のコードを使用し、保存された記事を削除するようにsaved_articleのIDで

<%= link_to 'Remove'.html_safe, "#{url_path_for_delete}?id=#{saved_article.id}", data: { confirm: 'Are you sure?', remote: true } %> 

パスを必要としてURLを交換されていませんコントローラメソッドのメソッドURLを削除します。

コントローラのルートはあなたが試すことができroutes.rbを

+0

私はちょうどどこをクリックしてください1つを削除する必要があります –

+0

私はあなたがすべての保存された記事を削除したいのではなく、 1つの保存された記事。右? その場合、コントローラコードを変更する必要はありません。 <%= link_to 'Remove'.html_safe、 "#{url_path_for_delete}?id =#{saved_article.id}"、data:{confirm : '本当ですか?'、remote:true}%> –

+0

ありがとうございますが、 '未定義のローカル変数またはメソッドsaved_article'を表示しています –

0

で「削除」メソッドであることを確認します。この

ビュー

<% current_user.saved_articles.pluck(:id).each do |aid| %> 
<%= form_for :remove, url: home_remove_path(aid), method: :delete, remote: true do |f| %> 
    <%= f.button 'Remove'.html_safe, data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Deleting..."}, :class => 'btn btn-default btn-delete' %> 
<% end %> 
<% end %> 

とコントローラであなたは1をすることにより、ID 1を取得リクエストごとに

すべての(あなたが工夫を使用している場合)before_action :authenticate_user!を追加し、その後、ワンクリック してsaved_articleコントローラで

<%= form_for :remove, url: home_remove_path, method: :delete, remote: true do |f| %> 
    <%= f.button 'Remove'.html_safe, data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Deleting..."}, :class => 'btn btn-default btn-delete' %> 
<% end %> 

とコントローラで

def remove 
    current_user.saved_articles.destroy_all 
    redirect_to home_path 
end 
+0

保存すると2つの記事、次に2つの削除ボタンを表示するすべてのオプション –

+0

クリックしてすべての記事を破棄するボタンを削除 –

0

を記事を保存、削除したい場合。これにより、何をしていても、現在のユーザーが利用可能であることが保証されます。次に、あなたのルートが

関連する問題