2014-01-08 5 views
5

У меня есть модель ActiveRecord с методом, определенным как это:Ошибка «Недействительный предикат» при обновлении с Meta_search до Ransack?

def state 

    if deleted? 
    :deleted  
    else 
    :expired 
    end 

end 

'search_method' определяется в модели как:

search_method: состояние

В вид:

= form.select: state, {: expired => 'Истек срок годности, : Удален => 'Удалено'} .invert,: include_blank => 'Все'

С Meta_search, этот метод работает отлично. Но когда я заменил драгоценный камень Ransack, я получаю: ArgumentError в Контроллере выборки Нет действительного предиката для состояния.

Я следую за этим поведением из meta_search search_methods, поэтому я мог бы принять неправильный подход. Кто-нибудь мне помогает, пожалуйста?

+0

Я думаю, вам нужно применить предикат в поле, как 'state_start'. Взгляните на эту проблему https://github.com/activerecord-hackery/ransack/issues/22 – phoet

ответ

0

Ransack использует предикат, добавленный в конец поля, которое вы ищете, чтобы указать, как его искать. Если у вас есть атрибут :state на вашей модели, вы можете найти состояния, которые соответствуют «expired» или «deleted», с помощью form.select :state_match,, где _match говорит, чтобы соответствовать записям с состоянием того, что вы выбрали. (Такие вещи, как _cont (содержит) или _start (начинается с)).

Ransack предлагает SQL-запросы для поиска записей, поэтому, если у вас есть атрибут вашей модели, например :deleted_at, вы можете искать по наличию или отсутствию. Он не будет рассматривать методы, а только информацию, хранящуюся в db.

Другие предикаты и информация здесь: https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching