使用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
有没有内置方法可以做到这一点?
由于
答案 0 :(得分:1)
假设你已经正确定义了你的关系,我猜你遇到了你想要有效地遍历一个关联然后向后遍历的情况,例如。
movie.actors.movie
对于HABTM关系,rails不会在actors集合上为您构建.movie方法,但您可以做的是扩展关联以包含这样的方法:
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
问题仍然存在,为什么你会想要这样做,因为你已经拥有它