我的应用程序中有一个HABTM关系,如下所示:
class Book < ActiveRecord::Base
has_and_belongs_to_many :authors
end
class Author < ActiveRecord::Base
has_and_belongs_to_many :books
end
在rails控制台中,我可以像这样访问Book和Author的记录:
Book.all
Book.first
b = Book.first
b.title = "Title2"
b.save
...
但我不知道如何访问联接表。
如何访问和查看联接表books_authors
中的记录?
是否可以更改连接表行?
答案 0 :(得分:4)
如果要访问联接表记录,则必须使用has-many-through
关系重新创建此记录。这是一个很好的指南,以及has-many-through
和has-and-belongs-to-many
之间的差异,这里:http://railscasts.com/episodes/47-two-many-to-many。
您需要创建一个新的迁移,如下所示,以创建连接表:
class Authorships < ActiveRecord::Migration
def change
create_table :authorships do |t|
t.belongs_to :book, index: true
t.belongs_to :author, index: true
t.timestamps null: false
end
add_foreign_key :authorships, :books
add_foreign_key :authorships, :authors
end
end
其中'作者'可以是您认为适合加入表的任何名称(如果您想坚持使用,可以是'BookAuthors')。
作为一个简单示例,您的模型可能如下所示:
class Book < ActiveRecord::Base
has_many :authorships
has_many :authors, through: :authorships
end
class Author < ActiveRecord::Base
has_many :authorships
has_many :books, through: :authorships
end
class Authorship < ActiveRecord::Base
belongs_to :book
belongs_to :author
end
您可以在连接表中添加额外的列,并根据需要访问它们,添加后再添加authorship_ids
和Author.first.books
/ Book.first.authors
。
希望这很有用!