【问题标题】:Not sure how to fill out missing paramters不知道如何填写缺失的参数
【发布时间】:2014-05-10 15:58:47
【问题描述】:

这个方法在tutor_session模型中

 def self.tutor_minutes_ranking(users, start_date, end_date)
     joins(:session_users)
     .select('session_users.user_id, SUM(session_length)')
     .where("session_users.user_id IN (?) and tutor_sessions.created_at > ? and tutor_sessions.created_at < ?", users, start_date.to_datetime, end_date.to_datetime)
     .group('session_users.user_id')
     .sum(:session_length, :order => 'sum_session_length DESC')
 end

好的,尝试获取一个

的辅导总分钟数

这个方法不是我写的。

但我正在尝试使用它,以便显示总数。

这是我在不同控制器中的内容(即,不是tutor_session 控制器):

    @total_minutes_month = TutorSession.total_minutes_for_user(current_user)

这是我的观点:

<% @total_minutes_month.each do |i| %>
   <%= i.first %>
<% end %> 

这是出现的错误:

wrong number of arguments (1 for 3)

显然我没有填写方法中显示的第二个或第三个参数的参数。

问题是,我不确定如何填写 start_date 和 end_date。

建议?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    试试这个月的总时间:

    TutorSession.total_minutes_for_user(current_user, 
                                        Time.now.beginning_of_month, 
                                        Time.now)
    

    上个月还有这样的事情:

    TutorSession.total_minutes_for_user(current_user, 
                                        1.month.ago.beginning_of_month, 
                                        1.month.ago.end_of_month)
    

    【讨论】:

    • 两者都出现此错误:undefined method each' for 0:Fixnum`
    • 别介意我之前的评论。当我不应该使用的时候,我仍在使用它们,对吧?它有效,我很感激。只是想知道,还有其他方法可以填写吗?你怎么知道beginning_of_monthend_of_month
    • 该方法需要两个日期或时间戳。您可以使用此Time.parse('2014-04-14 15:45') 来使用所需的任何时间范围
    【解决方案2】:

    @spickermann的回答正确解决了你的arguments错误


    但是,当您提到您收到 undefined_method 错误的 .each 语句时 - 问题将由 @total_minutes_month 仅具有 0 的值引起 - 这意味着没有 array/ hash循环浏览

    如果您想按现在的方式显示您从方法中获得的数据,您最好执行以下操作:

    #app/views/controller/view.html.erb
    <%= @total_minutes_month #-> should display total minutes for user %>
    

    我会亲自将该方法附加到user 模型的关联中,因此您可以调用current_user.tutor_sessions.first.total_minutes_month

    #app/models/user.rb
    Class User < ActiveRecord::Base
       has_many :tutor_sessions, through :session_users do
           def self.tutor_minutes_month(start, end)
               joins(:session_users)
              .select('session_users.user_id, SUM(session_length)')
              .where("session_users.user_id IN (?) and tutor_sessions.created_at > ? and tutor_sessions.created_at < ?", id, start.to_datetime, end.to_datetime)
              .group('session_users.user_id')
              .sum(:session_length, :order => 'sum_session_length DESC')
           end
       end
    end
    

    这样的事情可以让你打电话给current_user.tutor_sessions.first.total_minutes_month给你每次辅导课的时间

    【讨论】:

    • 嘿,感谢您解释为什么我收到 undefined_method 错误 .each ... 不胜感激。该应用程序不是我要修改的。等等……重读你的最后一句话。每次辅导课是什么意思?抱歉,我困了,所以可能不明白你在说什么,但我想知道每个月的总分钟数,因此我对你的最后一句话感到困惑。
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多