链接在Rails中的belongs_to关系

时间:2013-12-22 21:10:36

标签: ruby-on-rails

所以我正在使用一组具有直接belongs_to关系的模型。例如D belongs_to C belongs_to B belongs_to A.我经常发现自己需要访问“D's A”,我通常会写{{1}但是,这变得非常快。

我可以添加一些魔法给D模型直接跳到d_instance.c.b.a吗?

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是为实例D创建一个返回正确关联的方法:

class D
...
  def a
    self.c.b.a
  end
end

答案 1 :(得分:1)

您不能将throughbelongs_to一起使用,但可以使用delegate。以下是delegate的文档:http://api.rubyonrails.org/classes/Module.html#method-i-delegate

您可以在模型上使用delegate从另一个类调用方法,就好像它属于模型一样。在这些示例中,大写是类,小写是类的实例或方法名称。因此,在您的情况下,D有一个方法#c,以便d.c返回C的关联实例。 C有一个方法#bc.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相同的结果