【问题标题】:Ruby on Rails: Finding the sum of a column in a returned search queryRuby on Rails:在返回的搜索查询中查找列的总和
【发布时间】:2023-03-12 20:00:02
【问题描述】:

我正在尝试查找名为 length 的列的总和,这是一个简单的整数列,其中包含每条记录持续的秒数。

我有一个搜索表单设置来查询数据库中我在控制器中设置的一些条件:

@time_entries = TimeEntry.find(:all, :conditions => [ "(user_id = ?) AND (projecttitle LIKE ?) AND (date BETWEEN ? AND ?)", current_user, '%'+params[:projecttitle]+'%', @startdate, @enddate ])

然后我使用不起作用的代码跟踪该查询,尝试对返回的查询的length 列求和...

@total_time = @time_entries.sum(:length)

然后当我用<%= @total_time %> 在我的视图中渲染它时,我得到了这个错误:

undefined method '+' for #<TimeEntry:0x007ffdbbd45b78>

有什么想法吗?非常感谢您的帮助:)

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    改变

    @total_time = @time_entries.sum(:length)
    

    @total_time = @time_entries.sum(&:length)
    

    仅供参考,如果您只需要一列来操作,请在查询中使用 :select 子句,例如

    @time_entries = TimeEntry.find(:all, :select => 'length', 
                      :conditions => [ "(user_id = ?) AND (projecttitle LIKE ?) 
                               AND (date BETWEEN ? AND ?)", current_user, 
                               '%'+params[:projecttitle]+'%', @startdate, @enddate ])
    

    如果您只需要表格中某些列的总和,您可以使用sum 方法,例如

    @total_time = TimeEntry.sum(:length, 
                      :conditions => [ "(user_id = ?) AND (projecttitle LIKE ?) 
                               AND (date BETWEEN ? AND ?)", current_user, 
                               '%'+params[:projecttitle]+'%', @startdate, @enddate ])
    

    【讨论】:

    • 像魅力一样工作!非常感谢——请问&: 添加了什么?
    • 啊,太棒了!感谢您分享该链接 - 并感谢您的帮助!
    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多