我有一个Invoice
has_many
的{{1}}模型。我需要将关系从Transactions
更改为has_many
,而又不丢失当前数据,以便可以将单笔交易(付款)与多张发票相关联。
我当前的模型结构:
has_and_belongs_to_many
答案 0 :(得分:1)
在过去几年中,我还没有看到大量的HABTM协会。通常人们会先指定整个关联图:
class Invoice
has_many :invoice_transactions
has_many :transactions, through: :invoice_transactions
end
class InvoiceTransaction
belongs_to :invoice
belongs_to :transaction
end
class Transaction
has_many :invoice_transactions
has_many :invoices, through: :invoice_transactions
end
# in a migration
create_table :invoice_transactions do |t|
t.belongs_to :invoice
t.belongs_to :transaction
end
execute('INSERT INTO invoice_transactions VALUES (invoice_id, transaction_id) FROM (SELECT id, transaction_id FROM invoices)')
这是因为InvoiceTransaction可能会获得一些其他行为,但这只是(很少)投机编程(并且可能值得这样做)。
您所要求的完全可以通过以下方式实现:
class Transaction
has_any_belongs_to_many :invoices
end
class Invoice
has_and_belongs_to_many :transactions
end
rails guides中将对此进行进一步描述(以及另一个示例迁移)。