我使用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只有一条记录?
答案 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)
代码可能不完全适合您的应用,但您明白了。