在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进行类似的操作,同时不创建问题记录。
感谢
答案 0 :(得分:1)
如果您只是为了得到一个问题,那么不需要做Event.find并导致额外的工作。
您编写的两个操作都会执行两个查询。
答案 1 :(得分:1)
至于你的第一个问题,请记住以下几点:
就个人而言,如果只是为了避免过早优化,我会选择使用Event的界面来提取问题。
至于你的第二个问题,@ question.comments.build会自动在你的新结构中设置正确的引用,所以只要@question可用,我就会去做。 (哎呀,我甚至考虑在Question类中创建@ question.add_comment(..)方法。)
换句话说,过早优化是万恶之源。疏松耦合对你有好处。