Rails 3视图中是否可以接受查询?

mae*_*ics 4 model-view-controller ruby-on-rails ruby-on-rails-3

我对MVC的理解是SQL(或任何与持久性相关的)查询应该只在Model/Controller对象中执行.因此,有关控制器Rails 3文档指出:

[控制器]使模型数据可供视图使用,以便它可以向用户显示该数据.

但是,该文档还提供了在View(HTML帮助程序)代码中直接使用查询的示例:

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] })
# Note the model query -----^
Run Code Online (Sandbox Code Playgroud)

在Rails 3中,通常可以在Views中执行查询,还是有一个令人信服的理由将这些查询严格委托给Model或Controller对象?文档只是说明性的还是最佳实践的例证?

Amo*_*tir 6

我认为这仅仅是示范性的,而且一般来说并不是一个很好的例子.它与我们可以在PHP中找到的SQL Spaghettis代码足够接近.

我正在阅读Rails反模式书,他们建议在模型中查找所有这些查询.然后,控制器可以访问模型中定义的方法,将结果暴露给视图.

但是,如果你不注意,你可以很快发现自己有胖模型,并且为了避免你可以使用对这种模式有很大帮助的命名范围.要注意的另一个关键规则是应用于Rails 的Demeter法则意味着一个模型不应该对其他模型的实现细节了解太多.因此,如果存在与关联模型相关的查询,则应在此关联模型中进行范围调整.

最后,以下文章(由Jamis Buck编写)(瘦模型控制器,脂肪模型)是一个很好的阅读主题.