Rails - 通过范围最佳实践查找?

时间:2009-04-04 16:53:06

标签: ruby-on-rails

在rails中,我知道最好通过范围进行查找

例如在questions_controller中

def index
  @event = Event.find(params[event_id])
  @question = @event.questions
end

但是,在show action

中做同样的事情也是一种好习惯
def show
  @event = Event.find(params[:event_id])
  @question = @event.questions.find(params[:id])
end

或者更好的是直接在问题模型上进行查找,而不通过事件确定范围?

我对此感到好奇,并且在创建新记录时同时使用@ question.comments.build与Comment.new进行类似的操作,同时不创建问题记录。

感谢

2 个答案:

答案 0 :(得分:1)

如果您只是为了得到一个问题,那么不需要做Event.find并导致额外的工作。

您编写的两个操作都会执行两个查询。

答案 1 :(得分:1)

至于你的第一个问题,请记住以下几点:

  • 如果您在视图中突然需要@event怎么办?
  • 如果您想使用某些自定义逻辑(即访问控制)扩展Event.find,该怎么办?
  • 是否有的理由通过事件界面?

就个人而言,如果只是为了避免过早优化,我会选择使用Event的界面来提取问题。

至于你的第二个问题,@ question.comments.build会自动在你的新结构中设置正确的引用,所以只要@question可用,我就会去做。 (哎呀,我甚至考虑在Question类中创建@ question.add_comment(..)方法。)

换句话说,过早优化是万恶之源。疏松耦合对你有好处。