我来自UI / ColdFusion背景,对不起,如果我问一个愚蠢的问题。
假设我们有两个模型Book & Page
,一本书有很多页面。
通常情况下,我看到rails devs执行以下操作,
book = Book.find(id)
pages = book.pages
确实执行了两个查询,一个用于获取书籍,一个用于获取页面。
我们可以这样写,
Add a class method to Page model.
pages = Page.where(book_id: id)
这将执行一个查询但仍会返回结果。
但是,为什么开发人员更喜欢第一种方法而不是第二种方法。
答案 0 :(得分:2)
这只是人们遵循的做法
通常,当您访问嵌套资源时会出现这种情况
book = Book.find(id)
pages = Page.where(book_id: id)
所以要确保你的书不仅仅是孤儿页
pages = Page.where(book_id: id)
然而,通过上述查询,即使书籍被删除,您也会获得这些页面,以防您没有页面dependent: :destroy
答案 1 :(得分:2)
从我的练习中,您的问题有2个答案,正确答案取决于开发人员的经验。
.find
如果无法在数据库中找到记录,则会生成404页面。此外,如果您运行“自定义”sql,您将失去AR为您维护的“自动”模型 - 数据关系。所以,很多人选择这样做。所以你去吧。除非您正在处理非常繁重的负载应用程序,否则最好以可读的方式编写。