2016-04-05 9 views
0

私のデータベーステーブル内で複数のレコードを破壊しようとしています。リストの列は同じ名前ですが、リンクを破棄するとエラーが表示されます: 'bookmarks_posts'エラーが私のコントローラの行にあると言います。HABTM参照テーブル内の複数のオブジェクトを削除する

if @bookmarks.destroy_all 

なぜ結合テーブルが必要ですか?どうすれば変更できますか?また、私は指定されたブックマークテーブルの外に何かを破棄したくない。

def destroy 
    @list = Bookmark.find(params[:id]) 
    @bookmarks = Bookmark.where(:list => @list.list) 

    if @bookmarks.destroy_all 
     redirect_to bookmarks_url 
    end 
    end 

    def show 
    @lists = Bookmark.where(user_id: current_user.id).where(post_id: nil) 
    @list = Bookmark.find(params[:id]) 
    @bookmarks = Bookmark.where.not(post_id: nil).where(list: @list.list) 
    @posts = Post.where(:id => @bookmarks.map(&:post_id)) 
    end 

私のショービューで、私が使用してこの:

- 破壊し、ショー

class CreateBookmarks < ActiveRecord::Migration 
    def change 
    create_table :bookmarks do |t| 
     t.string :list 
     t.references :user, index: true, foreign_key: true 
     t.references :post, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    end 
end 

マイコントローラ:

私のテーブルの移行(それが何かを変更した場合、私は、sqlite3のを使用しています)

<%= link_to 'Destroy', @list, method: :delete %> 

マイモデル:

class Bookmark < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_and_belongs_to_many :posts 
end 
+0

質問をモデルコードで更新してください。 – Pavan

+0

ちょうど私がタイトルで述べたものよりも何もありませんでしたが、両方のテーブルの間のHABTMの関係、または私はそう思っています... – kvadrats

答えて

0

「なぜ、結合テーブルが必要ですか?」

ブックマークモデルとポストモデルの間にHABTM関連付けが指定されているためです。したがって、ブックマークまたはポストを削除すると、削除されたアイテムのIDを参照しているジョイン・テーブルの行が削除されます。

問題は、モデルに間違ったアソシエーションタイプを指定しているか、間違ったマイグレーションを作成してHABTMアソシエーションをサポートしているようです。

上記のデータベースの移行が正しいとします。たとえば、ブックマークテーブルにuser_idとpost_idを保存する場合などです。

class Bookmark < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :post 
end 

class User < ActiveRecord::Base 
    has_many :bookmarks 
end 

class Post < ActiveRecord::Base 
    has_many :bookmarks 
end 

をあなたが実際にHABTMの関係が必要な場合は、migration that creates a join tableを実行する必要があります。これは、以下の関連を持っていることを意味します。

必要な関連付けの種類を理解する方法の1つは、テーブルに別のモデルのIDがある場合(ブックマークテーブルにuser_id列があるなど)、それはbelongs_toの関連付けです。

+0

Mmigrationはexaclyですので、私はそれが欲しいと思っています。あなたが提案したものに変更する必要があります明日試して、結果を確認してください、ありがとう:) – kvadrats

+0

すべての作品は完全に、非常にありがとう:)私はちょうどレールでプログラミングを始めたように、私がちょうどhttp://guides.rubyonrails.org/association_basics.htmlを読んでいたならば防止されていたかもしれない間抜けの間違い:( – kvadrats

関連する問題