将Rails AssociationRelation转换为CollectionProxy

时间:2014-04-23 22:01:13

标签: ruby-on-rails rails-models

说我有这些课程:

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

我想要做的是直接为动物园启用lionstigers方法。

我可以轻松地进行检索:

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会返回AssociationRelationa_zoo.animals会返回CollectionProxy,就我所知,这是可更新的。

如何将a_zoo.animals的所有功能转移到a_zoo.lionsa_zoo.tigers

1 个答案:

答案 0 :(得分:-1)

您正在寻找has_many :lions, through :animals,请查看http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

另外,鉴于Animal可以是不同类型的,你应该检查多态关联。