ruby-on-rails - rails : Sum in 3rd level of nested resource

标签 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 nested sum

在我的 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/

相关文章:

ruby-on-rails - Devise gem 在暂存阶段不适用于 IE8(但适用于 Chrome 和 Firefox)

ruby-on-rails - Sidekiq 更改参数或参数

ruby-on-rails-3 - 构建 CoffeeScript 代码?

ruby-on-rails - ruby /rails : Converting datetime to natural language (e. g。 2012 年 3 月 23 日至 "this Friday")

ruby-on-rails - rails : Make a repeating partial in groups

jquery - 什么所见即所得与 jQuery 和 Ruby on Rails 3.1 (Sprockets) 配合得很好?

ruby-on-rails - 命令 bundle exec rake Assets :precompile错误

ruby-on-rails - 从 UBUNTU 14.0.4 LTS 卸载 Ruby 时出错

javascript - Rails 3 jQuery UI Datepicker 希望仅启用特定日期

ruby-on-rails - 是否可以抑制电子邮件中使用的图像 Assets 的指纹识别(Rails 3.1)?