所以我正在使用一组具有直接belongs_to
关系的模型。例如D belongs_to
C
belongs_to
B belongs_to
A.我经常发现自己需要访问“D's A”,我通常会写{{1}但是,这变得非常快。
我可以添加一些魔法给D模型直接跳到d_instance.c.b.a
吗?
答案 0 :(得分:1)
执行此操作的一种方法是为实例D
创建一个返回正确关联的方法:
class D
...
def a
self.c.b.a
end
end
答案 1 :(得分:1)
您不能将through
与belongs_to
一起使用,但可以使用delegate
。以下是delegate
的文档:http://api.rubyonrails.org/classes/Module.html#method-i-delegate
您可以在模型上使用delegate
从另一个类调用方法,就好像它属于模型一样。在这些示例中,大写是类,小写是类的实例或方法名称。因此,在您的情况下,D
有一个方法#c
,以便d.c
返回C
的关联实例。 C
有一个方法#b
,c.b
返回B
的关联实例,B
有一个返回关联实例的方法#a
A
。
如果您转到D
模式并delegate
#b
转到C
,当您致电d.b
时,它将与您致电d.c.b
相同{1}}。由于这可能令人困惑,以下是您需要的代码:
class D < ActiveRecord::Base
attr_accessible :this, :that, :the_other
belongs_to :c
delegate :b, to: :c
delegate :a, to: :b
end
重新启动服务器d.a
后,您将获得与d.c.b.a
相同的结果