单个ActiveRecord的多个外键has_one关系
问题描述:
我有一个与Office和Department相关的模型。单个ActiveRecord的多个外键has_one关系
class DataForm < ActiveRecord::Base
belongs_to :office
belongs_to :department
end
我也有第三个模型,监督许多办公室/部门组合。
class ManagementGroup < ActiveRecord::Base
belongs_to :office
belongs_to :department
end
我该怎么说DataForm与ManagementGroup有关联,其中办公室和部门彼此同步。
class DataForm < ActiveRecord::Base
belongs_to :office
belongs_to :department
# how would I get the below association to work
has_one :management_group, foreign_key: [:office_id, :department_id]
end
答
我怎么会说数据形有关联的选择[ManagementGroup在办公室和部门相互同步。你不能那样做。相反,重组这么:
- 一个
DataForm
属于ManagementGroup
- 一个
ManagementGroup
belongs_to的一个:office
和:department
因此,你可以通过观察确定您DataForm
的:office
和:department
在ManagementGroup
它belongs_to
。
@data_form.management_group.office
或更好,但使用的委托:
然后,您可以用类似访问DataForm
的`办公室。下面的示例:
class DataForm < ActiveRecord::Base
belongs_to :management_group
delegate :office, to: :management_group
delegate :department, to: :management_group
end
class ManagementGroup < ActiveRecord::Base
belongs_to :office
belongs_to :department
has_many :data_forms
end
然后,你可以这样做:
@data_form.office
@data_form.department
+0
为什么选择投票? –
+0
我相信这也是正确的方式,但我不太了解贾里德的商业案例。 – Sam
我不太明白的关系,因此,如果具有的DataForm只有一个选择[ManagementGroup,为什么不选择[ManagementGroup属于的DataForm?哎呀,我认为DataForm应该属于ManagementGroup。 – Sam
我想它属于纯粹基于其办公室/部门组合的管理组。我打算获得管理组的实际PK,然后将其存储起来。但是这可能会导致不同步和额外的更新,而不是仅仅使用已经可以为我建立关联的数据。 – Jared