渲染查询最佳实践rails 4.0

时间:2014-05-24 05:14:53

标签: ruby-on-rails activerecord render

我有一个合同模型,其中有一个名为" totalAward"的字段。在我的index.html.erb视图中,我有以下代码:

<p> Total Award Amount: <td><%= number_to_currency(Contract.sum('awardAmount')) %></td>     </p>

我相当肯定在视图中进行数据库调用对我来说不是最佳做法,但我不知道如何在控制器或模型中以我的方式执行此操作可以在视图中呈现它。有人可以帮助我如何在控制器或模型中调用数据库吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

来自控制器的实例变量(@contracts)将允许您访问模型的属性。我相信你想使用ActiveRecord的sum方法。以下是您在视图中使用它的方法:

<%= @contracts.sum(:totalAward) %> 

这样,您就不会在视图中查询数据库。但您可以访问控制器中的实例变量(@contracts),该变量包含所有合同的集合。

答案 1 :(得分:1)

Wali Ali之后,您最好坚持MVC programming pattern(Rails的基础)。这意味着您需要在controllermodels

中的数据存储中保留数据分配(设置变量)

我会使用instance method

#app/models/contract.rb
Class Contract < ActiveRecord::Base
    def total
        sum(:totalAward)
    end
end

这将允许您执行以下操作:

#app/controllers/contracts_controller.rb
Class ContractsController < ApplicationController
    def index
       @contracts = Contract.all #-> @contracts.total for all
       @contracts = Contract.where(some: value) #-> @contracts.total for these items
    end
end