Нет действительной ошибки предиката при обновлении с Meta_search до Ransack?

У меня есть модель ActiveRecord с методом, определенным следующим образом:

def state   

  if deleted?
    :deleted    
  else
    :expired
  end

end

'search_method' определен в модели как:

search_method : состояние

В представлении:

= form.select :state, { :expired => 'Просрочено', :deleted => 'Удалено' }.invert, :include_blank => 'Все'

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

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


person Rajasree Muraleedharan    schedule 08.01.2014    source источник
comment
Я думаю, вам нужно применить предикат к полю типа state_start. Взгляните на эту проблему github.com/activerecord-hackery/ransack/issues/22< /а>   -  person phoet    schedule 08.01.2014


Ответы (1)


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

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

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

person allielarson1212    schedule 11.04.2015