我有一个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关系以及何时使用的经验法则 简单地编写自己的方法?
答案 0 :(得分:0)
我认为这更像是ActiveRecord的封装问题。
一般来说,我会在这里应用我的经验法则:
在您真正想要建立关系模型时使用has_many :through
。
当您要做的只是违反Law of Demeter或保持代码干净时,实施委派方法。