有没有办法创建一个分组的命名范围?

时间:2010-11-04 02:21:38

标签: ruby-on-rails arrays group-by named-scope

我使用searchlogic进行以下操作:

@todos = Todo.contact_user_id_is(current_user).
              contact_campaign_id_is(@campaign).
              current_date_lte(Date.today).
              done_date_null.
              ascend_by_current_date

我只希望@todos包含单个contact_id的Todo记录(contact_id是Todo上的一个属性)。

问题:如何分组,以便@todos数组中每个contact_id只有一条记录?

1 个答案:

答案 0 :(得分:1)

named_scope支持分组。这样的事情应该有效:

class Todo < ActiveRecord::Base

  belongs_to :contact

  named_scope :one_per_contact, lambda{ |user, campaign|
    {
      :joins => :contact,
      :conditions => ['contacts.user_id = ? AND contacts.campaign_id = ? AND todos.current_date <= ? AND todos.done_date IS NULL', user.id, campaign.id, Date.today],
      :group => 'todos.contact_id'
      :order => :current_date
    }
  }

end

然后把它放在你的控制器中:

@todos = Todo.one_per_contact(current_user, @campaign)

代码可能不完全适合您的应用,但您明白了。