有两种型号。一个是rfq,另一个是标准。它就像:
class Rfq << ActiveRecord::Base
has_and_belongs_to_many :standards
end
class Standard << ActiveRecord::Base
has_and_belongs_to_many :rfqs
end
表rfqs_standards已创建。我的问题是在创建rfq时,如何自动保存表rfqs_standards中的rfq_id和standard_id的付费。
想在rfq模型中添加accepts_nested_attributes_for :standard
。但是,由于没有为这种多对多关系保存的真实属性(但只是一对id),这似乎不是正确的方法。
rfq和standard都在routes.rb中声明为resources :rfqs
和resources :standards.
程序是在创建rfq时,将通过下拉列表选择标准。然后保存rfq,同时创建联合表中的新条目。创建新标准时,无需在联合表中创建条目。
是否有任何建议将ID保存在联合表中?感谢。
答案 0 :(得分:1)
这比您想象的要容易,因为它由ActiveRecord自动处理。
当您说“has_and_belongs_to_many”时,您告诉AR使用该表将这两个模型与多对多关系相关联,并且大多数情况下您不再需要担心连接表。当您将标准实例添加到Rfq的标准列表时,这将为您完成。
以下是一个例子:
rfq = Rfq.create
standard = Standard.create
rfq.standards << standard
我们创建了每个对象,第三行创建了连接,使用正确的id在rfqs_standards表中保存了一条新记录。 rqf.standards看起来和行为类似于普通数组,但是当你为它分配对象时,ActiveRecord会让数据库为你工作。
创建记录后,您还可以完成:
standard.rfqs << rfq
你也可以同时做两件事:
rfq = Rfq.create
standard rfq.standards.create
这创建了一个rfq,然后创建了一个自动连接到rfq的标准。你可以反过来做同样的事情:
standard = Standard.create
rfq = standard.rfqs.create
我希望这有帮助!
更新:由于您提到了表单和自动保存,请阅读nested attributes上有关如何实现该文章的文章,包括完整的代码示例。