Rails具有单向关联,这不是强制性的

时间:2014-11-17 14:10:51

标签: ruby-on-rails activerecord orm model associations

我有这样的模特

class Agency < ActiveRecord::Base
   has_one :office
end

class Office < ActiveRecord::Base
   belongs_to :agency
end

问题是我不知道如何创建这样的关系,这不是强制性的(某些代理商可以有办公室,其他代理商 - 可以只是没有办公室的在线代理商)。在添加任何代理商的当前方法中,我每次都必须建立办公室,即使没有这样的数据,只需存储空的相关记录:

agency = Agency.create!(attributes)
agency.build_office
agency.save!

这样做的正确方法是什么?

更新

实际上,当我使用这样的表格时会出现这个问题:

form_for @agency.....
...
  fields_for @agency.office ...

如果数据库中没有办公室记录,我会收到一些错误(与类名或类似名称相关)。

或者我应该简单地在控制器中构建@office对象并将其直接传递给view而不是简单地传递@agency并使用不存在的@ agency.office?

更新

决定将表单拆分为独立的控制器独立的部分,因此将所有内容保存在一页上真的很不舒服。

1 个答案:

答案 0 :(得分:0)

最好的事情是拒绝使用nested_attributes_for并创建两个不同的对象。如果需要,稍后在trasaction中创建或更新它们。这将消除在真正需要之前构建不必要的东西所带来的所有复杂性和问题。