我的任务属于不同的模型,但始终分配给公司和/或用户。我试图通过在due_at日期对它们进行分组来缩小显示的内容,而不进行多次查询。
有一名申请助手
def current_tasks
if user_signed_in? && !current_company.blank?
@tasks = Task.where("assigned_company = ? OR assigned_to = ?", current_company, current_user)
@current_tasks = @tasks
else
@current_tasks = nil
end
end
然后在我的主视图中我有
<%= render :partial => "common/tasks_show", :locals => { :tasks => current_tasks }%>
我的问题是,在我的任务课中,我有你在下面看到的内容。我和名为due_today
的范围相同。当我尝试current_tasks.due_today
时,如果我尝试current_tasks.select_due_today
我会得到undefined method "select_due_tomorrow" for #<ActiveRecord::Relation:0x66a7ee8>
def select_due_today
self.to_a.select{|task|task.due_at < Time.now.midnight || !task.due_at.blank?}
end
答案 0 :(得分:0)
如果你想调用current_tasks.select_due_today
那么它必须是一个类方法,就像这样(将你的Ruby翻译成SQL):
def self.select_due_today
select( 'due_at < ? OR due_at IS NOT NULL', Time.now.midnight )
end
或者,你可以和一个范围几乎一样 - 但是把它放在一个lambda中,以便在调用范围时调用Time.now.midnight
,而不是在你定义它时。
[已编辑以将IS NULL
切换为IS NOT NULL
- 这反映了问题中的Ruby,但没有任何意义,因为它会否定OR
s含义的左侧