此方法在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。
么?
答案 0 :(得分:2)
请尝试本月的总时间:
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)
答案 1 :(得分:1)
@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
给你每个导师会议的会议记录