访问 HABTM 加入 table 条记录
Access HABTM join table records
我的应用程序中有这样一个 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.all
Book.first
b = Book.first
b.title = "Title2"
b.save
...
但我不知道如何访问连接 table。
如何访问和查看联接中的记录 table books_authors
?
是否可以更改联接 table 行?
如果要访问加入 table 记录,则必须使用 has-many-through
关系重新创建它。这里有一个很好的指南,以及 has-many-through
和 has-and-belongs-to-many
之间的区别:http://railscasts.com/episodes/47-two-many-to-many。
您需要像下面这样创建一个新的迁移来创建连接 table:
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
其中 'Authorships' 可以是您认为适合 table 的任何名称用于连接 table(或者 '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
您可以将额外的列添加到联接 table 并根据需要访问它们,以及 authorship_ids
和 Author.first.books
/ Book.first.authors
添加后。
希望有用!
我的应用程序中有这样一个 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.all
Book.first
b = Book.first
b.title = "Title2"
b.save
...
但我不知道如何访问连接 table。
如何访问和查看联接中的记录 table books_authors
?
是否可以更改联接 table 行?
如果要访问加入 table 记录,则必须使用 has-many-through
关系重新创建它。这里有一个很好的指南,以及 has-many-through
和 has-and-belongs-to-many
之间的区别:http://railscasts.com/episodes/47-two-many-to-many。
您需要像下面这样创建一个新的迁移来创建连接 table:
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
其中 'Authorships' 可以是您认为适合 table 的任何名称用于连接 table(或者 '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
您可以将额外的列添加到联接 table 并根据需要访问它们,以及 authorship_ids
和 Author.first.books
/ Book.first.authors
添加后。
希望有用!