Ruby on rails 变化有很多,也有很多
我有一个Ruby on rails 变化有很多,也有很多,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我有一个发票模型,有许多交易。我需要在不丢失当前数据的情况下,将关系从has\u many更改为has\u and\u belient\u to\u many,以便我可以将一笔交易(付款)与多张发票关联 我当前的模型结构: class Invoice has_many :transactions end class Transaction belongs_to :invoice end 在过去的几年里,我还没有看到大量的HABTM协会。通常,人们会继续指定整个关联图: c
发票
模型,有许多
交易
。我需要在不丢失当前数据的情况下,将关系从has\u many
更改为has\u and\u belient\u to\u many
,以便我可以将一笔交易(付款)与多张发票关联
我当前的模型结构:
class Invoice
has_many :transactions
end
class Transaction
belongs_to :invoice
end
在过去的几年里,我还没有看到大量的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
这将在中进一步描述(以及另一个示例迁移)。您确定要使用HABTM而不是
has\u many:through
?@jvillian这几乎是一样的,对吗?除了连接表是我要创建的模型之外?我有几个其他模型使用这种结构,它工作得很好。我想,如果您将来可能需要在关联对象上存储什么数据,您可以保存另一个数据迁移,但是使用有很多:通过。就我个人而言,我从未使用过HABTM,但这只是我个人的喜好。说得好。然而,我相信OP的问题是关于迁移现有数据(我需要将关系从has_many更改为has_,并且在不丢失当前数据的情况下将_归属于_many)。@AaronBreckenridge如何将数据保存到InvoiceTransaction
模型?假设我想在那里保存给定发票的金额。这似乎不是正确的位置(amount
听起来像是交易的属性),但您只需在迁移中添加一个amount
列。