在Rails中,我们经常会遇到一些情况,其中一些查询是从Views(甚至是帮助程序)中触发的。例如,如果我想在页面中添加一个选择框,我会写一些像;
<%= collection_select(:person, :city_id, City.all, :id, :name) %>
此示例直接来自Rails指南。在这里,我们使用“City.all”而不是实例变量。我的问题是,这会对我的申请表现有什么影响吗?
以下是做同样事情的更好方法吗?为什么呢? 在控制器中:
@cities = City.all
然后在视图中:
<%= collection_select(:person, :city_id, @cities, :id, :name) %>
答案 0 :(得分:1)
它对应用程序没有特殊影响,无论是视图还是控制器,因为对于系统来说它是一样的 - &gt;正在发出的查询。但是它的实践根本就没有被鼓励,那么代码隔离和模块化的整个概念就是折腾。
出于这个原因,我建议在视图中使用实例变量。
答案 1 :(得分:1)
实际上存在差异,有时是必不可少的。渲染速度(响应时间)在很大程度上取决于注入的密集查询。解释为什么会发生这种情况可能会很乏味,但是将其作为一项规则更容易:以这种方式设计应用程序,ActionView与准备好的(加载到内存中)对象一起工作。
我认为ActionView是Rails的一大瓶颈(特别是ERB编译)。