在我的 Rails 3.1 应用程序中,我有这些模型:
class Project < ActiveRecord::Base
has_many :tasks
has_many :hours, :through => :tasks
def sum_hours
self.hours.sum(:hours)
end
end
class Task < ActiveRecord::Base
belongs_to :project
has_many :hours
def sum_hours
self.hours.sum(:hours)
end
end
class Hour < ActiveRecord::Base
attr_accessible :hours # column in table
belongs_to :task
end
在projects_controller.rb中:
def show
@project = Project.find(params[:id])
@tasks = @project.tasks.includes(:hours)
end
在projects/show.html.erb中我使用这个:
...
<td>Sum hours: <%= @project.sum_hours %></td>
...
<% for task in @tasks do %>
<tr>
<td><%= task.sum_hours %></td>
</tr>
...
但即使使用.includes(:hours),它仍然对项目和每个任务单独使用查询。我错过了什么吗?我哪里做错了???
最佳答案
你可以尝试这样的事情,
@tasks = @project.tasks.joins(:hours).select("tasks.*, sum(hours) as total")
然后您可以通过以下方式访问总和:
task["total"].to_i
我无法确保这些代码适合您。但基本思想是连接表并选择总和作为额外字段。
关于ruby-on-rails - rails : Sum in 3rd level of nested resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210504/