0
当我在has_many关系中使用STI时,我想通过超类的关联来访问子对象,但在坚持之前我无法做到。有没有办法通过两个has_many关联来访问STI表?
这些是与我的情况类似的示例代码。
class Parent < ActiveRecord::Base
has_many :children, class_name: 'Child', inverse_of: :parent
has_many :male_children, class_name: 'Children::Male'
has_many :female_children, class_name: 'Children::Female'
end
class Child < ActiveRecord::Base
belongs_to :parent, inverse_of: :children
end
class Children::Male < Child
end
class Children::Female < Child
end
当我将has_many关联设置为子类的关联时,我无法通过超类关联进行访问。
parent = Parent.new
parent.male_children << Children::Male.new
parent.female_children << Children::Female.new
parent.children # => []
保存并重新加载父节点后,当然我可以从数据库中获取超类的子关联作为ActiveRecord提取。
parent.save
parent.reolad
parent.children # => [#<Children::Male ...>, #<Children::Female ...>]
我可以通过实现这样
class Parent < ActiveRecord::Base
...
def children
[male_children, female_children].flatten
end
end
实例方法解决这个问题,但我更喜欢联想出于某种原因(可预见性,分配参数,可以等)。 那么有谁知道如何设置关联定义,或者这是不可能的?
在实际的代码中,班级不是男性/女性的孩子。我试图通过家长/孩子的关系来解释我的麻烦。 而作为实际代码中的子类有不同的行为,我很高兴如果你认为男性/女性的孩子有不同的行为。 – tacamula