说我有这些课程:
class Zoo < ActiveRecord::Base
has_many :animals
end
class Animal < ActiveRecord::Base;
belongs_to :zoo
end
class Lion < Animal; end
class Tiger < Animal; end
我可以轻松地a_zoo.animals
,但更重要的是a_zoo.animals << a_lion_or_a_tiger
。
我想要做的是直接为动物园启用lions
和tigers
方法。
我可以轻松地进行检索:
def lions
animals.where(type: 'Lion')
end
# analogous for the tiger, can be generalized with metaprogramming
# but right now there's no need to
但是我很难修改。也就是说,a_zoo.lions
会返回AssociationRelation
而a_zoo.animals
会返回CollectionProxy
,就我所知,这是可更新的。
如何将a_zoo.animals
的所有功能转移到a_zoo.lions
和a_zoo.tigers
?
答案 0 :(得分:-1)
您正在寻找has_many :lions, through :animals
,请查看http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
另外,鉴于Animal可以是不同类型的,你应该检查多态关联。