通过 :through 为 has_many 关联添加字段

Add field for an has_many association with :through

我有一个关于 has_many 协会的问题:

这是我的示例 db/models :

Table document

id   : int
name : text

class Document < ActiveRecord::Base
    has_many :document_pages
    has_many :pages, through: :document_pages
end

Table page

id      : int
content : text

class Page < ActiveRecord::Base
    has_many :document_pages
    has_many :documents, through: :document_pages
end

Table document_pages

document_id : int
page_id     : int
page_number : int

class Page < ActiveRecord::Base
    belongs_to :pages
    belongs_to :documents
end

我正在创建页面和文档,我 link 这两个是这样的:

page = Page.create(:content => 'lorem')
document = Document.where(:id => id).first_or_initialize.tap do |document|
    document.pages << page unless document.pages.include?(page)
end

并且在 document.pages << page 行中,我想提供 table document_pages.

的字段 page_number

你知道怎么做吗?

做不同的事情:

page = Page.create(:content => 'lorem')

document = Document.where(:id => id).first_or_initialize. do |document|
    document.document_pages.build(page: page, page_number: 1 ) unless document.pages.include?(page)
    document.save!
end