连接表是否可以具有自己的has_many关系

时间:2014-03-11 01:28:01

标签: ruby-on-rails ruby-on-rails-4 has-many-through jointable

我尝试过但未能从has_many联接表创建has_many :through关联,例如

class Child < ActiveRecord::Base
  has_many :relationships
  has_many :parents, through: :relationships
end

class Parent < ActiveRecord::Base
  has_many :relationships
  has_many :children, through: :relationships
end

class Relationship < ActiveRecord::Base             <------ Join table
  belongs_to :child
  belongs_to :parent
  has_many :schedules
end

class Schedule < ActiveRecord::Base
  belongs_to :relationship
end

我之所以这样,是因为孩子可以有很多时间表,但是在监管纠纷或杂乱离婚的情况下,我不希望父母1看到父母2给孩子的时间表。父母当然可以有很多孩子,所以我不能把时间表与父模型放在一起。

同一个父母也可以有许多同一个孩子的日程安排,例如本周一个,下周一个。

我尝试了其他策略,但这种方法最适合数据,所以我想确认是否不可能。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为应该遵循:

class Child < ActiveRecord::Base
  has_many :relationships
  has_many :parents, through: :relationships
  has_many :schedules
end

class Parent < ActiveRecord::Base
  has_many :relationships
  has_many :children, through: :relationships
  has_many :schedules
end

class Relationship < ActiveRecord::Base
  belongs_to :child
  belongs_to :parent
end

class Schedule < ActiveRecord::Base
  belongs_to :child
  belongs_to :parent
end

修改 上述关系很容易处理,因为它会直接为您提供日程安排

child_object.schedules     # All schedules of child
parent_object.schedules    # All schedules of parent

您可以通过在Schedule模型

中定义范围来进一步过滤此结果