Есть ли способ создать именованную область, которая группирует? - PullRequest
1 голос
/ 04 ноября 2010

У меня есть следующее использование 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 содержал запись Todo только для одного contact_id (contact_id является атрибутом для Todo).

Вопрос:как мне сгруппировать, чтобы в массиве @todos была только одна запись на contact_id?

1 Ответ

1 голос
/ 04 ноября 2010

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)

Код может быть не совсем правильным для вашего приложения, но вы поняли идею.

...