Использование Paginate с построенным запросом в активной записи - PullRequest
3 голосов
/ 01 марта 2012

Я пытаюсь сделать что-то вроде следующего:

if start_date?
  query = where("datetime > :start_date", :start_date => start_date)
end

if end_date?
  query = where("datetime <= :end_date", :end_date => end_date)
end

if client
  query = where("client.name LIKE :client", :client => client)
end

if staff
  query = where("staff.name LIKE :staff", :staff => staff)
end

paginate :per_page => 20, :page => page,
           :conditions => query,
           :order => 'datetime'

Я не могу найти примеров того, как создать запрос и использовать его вместе с плагином paginate. Конечно, запрос еще не правильный, так как я должен выяснить, как выполнять объединения, чтобы я мог выполнять запросы к другим свойствам в других таблицах, но кроме этого, как вы строите запросы для использования в условиях

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Вы хотите поместить вызов .paginate в конец цепочки вызовов, например, (одна строка, разделенная для удобства чтения)условия, вы можете сделать это, например:

x = SomeClass
x = x.where("datetime > :start_date", :start_date=>start_date) if start_date
x = x.where("datetime < :end_date", :end_date=>end_date) if end_date
x.paginate(:per_page=>20,:page=>page)
0 голосов
/ 01 марта 2012

.where () возвращает ActiveRecord :: Relation

.paginate () s: параметр условий должен быть массивом условий, как если бы он был аргументом .where ().

Вы должны исправить свой код следующим образом:

if start_date?
  query = ["datetime > :start_date", :start_date => start_date]
end

и т.д.

...