Расширенные поисковые запросы в Rails 3.1 - PullRequest
1 голос
/ 12 января 2012

Я хочу выполнить расширенный запрос для модели задачи (упрощенная версия:

class Task
    belongs_to :user_task
    belongs_to :customer
end

class UserTask
    has_many :tasks
    belongs_to: :user
    attr_accessible :date
end

class Customer
    has_many :tasks
end

То, что я хочу построить, - это форма поиска для модели de Task со следующими полями:

  • from_date (поле даты): все задачи, для которых соответствующая UserTask имеет значение после from_date
  • to_date (поле даты): все задачи, для которых соответствующая UserTask имеет значение до to_date
  • клиенты (сбор в виде флажка): все задачи, которые соответствующий клиент включен в выбор клиента.

Я создал ресурс TaskSearch для сохранения результатов поиска и могу представить большую и некрасивую строку SQL для запросов к базе данных, но я не уверен, что это лучший способ сделать это.

Какой будет подход ActiveRecord?

Спасибо заранее.

1 Ответ

5 голосов
/ 12 января 2012
class Task
  belongs_to :user_task
  belongs_to :customer

  scope :from_date, lambda { |date| joins(:user_task).where("user_tasks.date > ?", date) }
  scope :to_date, lambda { |date| joins(:user_task).where("user_tasks.date < ?", date) }
  scope :with_customers, lambda { |customer_ids| joins(:user_task).where("user_tasks.user_id IN (?)", customer_ids) }
end

Надеюсь, это сработает.Дело в том, что, объединяя таблицы, вы можете получить несколько результатов для одной и той же задачи.Возможно, вам придется добавить отдельное предложение в метод select (), например:

select("DISTINCT tasks.*")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...