ActiveRecorded关联模型返回参考

时间:2009-09-08 02:44:41

标签: ruby-on-rails activerecord associations

使用has_many / belongs_to方法将模型与另一个模型相关联很容易。我们假设以下模型:

class Movie < ActiveRecord::Base
    has_many :actors
end

所以,我可以从给定的电影实例中找到演员。但是现在,给定通过 actors 关联获得的actor实例,我想找到关联中相关的电影实例。像“associated_instance”或“back_association”这样的方法会使以下语句返回true:

movie_instance.actors[0].**associated_instance** == movie_instance

有没有内置方法可以做到这一点?

由于

3 个答案:

答案 0 :(得分:1)

假设你已经正确定义了你的关系,我猜你遇到了你想要有效地遍历一个关联然后向后遍历的情况,例如。

movie.actors.movie

对于HABTM关系,rails不会在actors集合上为您构建.movi​​e方法,但您可以做的是扩展关联以包含这样的方法:

class Movie < ActiveRecord::Base
  has_and_belongs_to_many :actors do
    def movie
      proxy_owner
    end
  end
end

Mike Gunderloy在Rails指南网站上有关于关联扩展的优秀指南:http://guides.rubyonrails.org/association_basics.html#association-extensions

希望我在正确的方向上刺伤了这个问题:)

答案 1 :(得分:0)

  

...给出了一个演员实例   通过演员协会......

如果您正在使用actors关联,那么您已拥有movie对象。你在这里试图解决的问题是什么?

我怀疑如果我们最终了解你想要完成的事情,答案就是“阅读'has_and_belongs_to_many'和/或'has_many :through上的文档”“。

修改

我刚才注意到你的澄清(虽然电影和情节也可以被视为多对多,因为它们会被无休止地回收)。

假设您确实尝试使用多对一关系,问题的根源是您忘记了以下内容吗?

class Plot < ActiveRecord::Base
  belongs_to :movie
end

答案 2 :(得分:0)

是的,你可以使用

做你想做的事
movie_instance.actors[0].movie 

问题仍然存在,为什么你会想要这样做,因为你已经拥有它