【发布时间】:2017-08-07 19:28:35
【问题描述】:
当我在 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
但出于某种原因(可预测性、分配参数等),我更喜欢关联。 那么有谁知道如何设置关联定义,或者这不可能吗?
【问题讨论】:
标签: ruby-on-rails ruby activerecord