2011-12-11 5 views
0

私は本と著者のモデルを持っています。多対多の関連付けと結合テーブルで親モデルを参照しています - Rails 3

Books has_many authors 、そして私のルートで

Authors has_many booksは、本は著者の下にネストされている、と私は2つ(authors_books)を接続し、テーブルに参加しています。

だから、本のパスはここに住むでしょう:私はfind_or_create_by methodで新しいブックを作成/見つけるために、XYZをやっている機能を持っている場合authors/1/books

私の質問は私のモデルでは、ある - 私はそれがリンクすることを確認しない方法私のauthors_books結合テーブルの新しいレコードに親著者IDを持つ新しい/見つかった本IDをアップしますか?

答えて

1

has_and_belongs_to_manyではなく、この結合の途中でモデルを作成することでこれを行うことができます。より良い名前の不足のために、私はこのモデルAuthorshipを呼ぶだろうし、それは次のようになります。

class Authorship < ActiveRecord::Base 
    belongs_to :author 
    belongs_to :book 
end 

その後、あなたは、このような本にあなたのAuthorモデルで関連付けを定義します

class Author < ActiveRecord::Base 
    has_many :authorships 
    has_many :books, :through => :authorships 
end 

そして、あなたBookモデルでは、逆:

class Book < ActiveRecord::Base 
    has_many :authorships 
    has_many :authors, :through => :authorships 
end 

この方法で、あなたはまだ持っていると思います「とあり、多くに属している」W君以外、あなたが望む機能新たに作成されたモデルを介して結合テーブルのレコードにアクセスできるようになりました。