我应该使用ActiveRecord has_may-through关系,还是获取相关项的方法?

时间:2013-05-29 07:34:27

标签: ruby-on-rails-3 activerecord

我有一个FormResponse belongs_to表格;表格然后has_many问题:

class FormResponse < ActiveRecord::Base
   belongs_to :form
end

class Form < ActiveRecord::Base
  has_many :form_responses
  has_many :questions
end

class Question < ActiveRecord::Base
end

当我发现自己在表单的上下文中需要questions时,我更喜欢在FormResponse上调用问题,如下所示:

form_response = FormResponse.find(id)
form_response.questions

为了使questions可用,我可以在ActiveRecord中执行此操作:

class FormResponse < ActiveRecord::Base
   belongs_to :form
   has_many :questions, :through => :form
end

或使用即时方法:

class FormResponse < ActiveRecord::Base
  belongs_to :form

  def questions
     self.form.questions unless self.form.nil?
  end
end

我对在FormResponse上设置问题不感兴趣(我不需要 像FormResponse.questions <<FormResponse.questions.build),只是抓取。

使用has_many :questions, :through => :form而不是使用方法有什么好处,反之亦然?有没有像懒惰加载,更好的好处 SQL等等?

AR是否给出了何时使用AR关系以及何时使用的经验法则 简单地编写自己的方法?

1 个答案:

答案 0 :(得分:0)

我认为这更像是ActiveRecord的封装问题。

一般来说,我会在这里应用我的经验法则:

在您真正想要建立关系模型时使用has_many :through

当您要做的只是违反Law of Demeter或保持代码干净时,实施委派方法。