Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 单个ActiveRecord的多个外键具有一个关系_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 单个ActiveRecord的多个外键具有一个关系

Ruby on rails 单个ActiveRecord的多个外键具有一个关系,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个与办公室和部门相关的模型 class DataForm < ActiveRecord::Base belongs_to :office belongs_to :department end classdataform

我有一个与办公室和部门相关的模型

class DataForm < ActiveRecord::Base
  belongs_to :office
  belongs_to :department
end
classdataform
我还有第三个模型,负责管理许多办公室/部门组合

class ManagementGroup < ActiveRecord::Base
   belongs_to :office
   belongs_to :department
end
class-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
classdataform
我怎么说数据表单与管理组有关联,在管理组中,办公室和部门彼此同步。你不能这样做。相反,您可以对其进行重组,以便:

  • 数据表单
    属于
    管理组
  • 管理组
    属于
    :办公室
    :部门
因此,您可以通过查看所属的
管理组
来确定
数据表单的
:office
:department

然后,您可以通过以下方式访问您的
数据表单
的办公室:

@data_form.management_group.office
或者更好的是,使用委托人。示例如下:

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

我不太了解这些关系,所以如果DataForm只有一个ManagementGroup,为什么ManagementGroup不属于DataForm?见鬼,我认为DataForm应该属于ManagementGroup。我想它属于ManagementGroup,完全是基于它的office/department组合。我的想法是获取管理组的实际PK,然后将其存储起来。但这可能会导致不同步和额外的更新,而不仅仅是使用已经可以为我建立关联的数据。我相信这也是正确的方法,但我不太理解jared的商业案例。
@data_form.office
@data_form.department