Rails 3显示部分任务

时间:2011-03-25 17:19:29

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

我的任务属于不同的模型,但始终分配给公司和/或用户。我试图通过在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

1 个答案:

答案 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含义的左侧