访问 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-throughhas-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_idsAuthor.first.books / Book.first.authors 添加后。

希望有用!