2012-04-18 72 views
2

的第三级我有这些模型:的Rails:总在我的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 

和项目/ show.html。 ERB我用这个:

... 
<td>Sum hours: <%= @project.sum_hours %></td> 
... 
<% for task in @tasks do %> 
<tr> 
    <td><%= task.sum_hours %></td> 
</tr> 
... 

但即使有.includes(:小时)它仍然使用为项目和每个任务分别进行查询。我错过了什么?我在哪里做错?

回答

2

你可以尝试这样的事情,

@tasks = @project.tasks.joins(:hours).select("tasks.*, sum(hours) as total") 

然后你就可以访问由总和,

task["total"].to_i 

我不能保证这些代码对你的作品。但基本的想法是加入表格并选择总和作为额外的领域。

+0

谢谢,这帮了我很多! – Ryan 2012-11-07 01:02:05