У меня есть таблица «Работа» с полем перечисления «Статус». status имеет следующий набор перечислений:
enum status: [ :draft, :active, :archived ]
используя ransack, как мне отфильтровать таблицу, скажем, по всем активным записям?
У меня есть таблица «Работа» с полем перечисления «Статус». status имеет следующий набор перечислений:
enum status: [ :draft, :active, :archived ]
используя ransack, как мне отфильтровать таблицу, скажем, по всем активным записям?
Вы можете объявить собственного вымогателя в модели следующим образом:
ransacker :status, formatter: proc {|v| statuses[v]} do |parent|
parent.table[:status]
end
Затем вы можете использовать синтаксис поиска по умолчанию _eq
для проверки равенства следующим образом:
Model.ransack(status_eq: 'active').result
Изменить: если имя столбца не меняется, вы можете пропустить блок кода:
ransacker :status, formatter: proc {|v| statuses[v]}
active
в целое число .to_i
, поэтому вы всегда будете получать 0
вместо правильного значения.
- person qarol; 19.05.2016
Это то, что я использую в своих представлениях для перечислений и поиска:
<%= f.select :status_eq, Model.statuses.to_a.map { |w| [w[0].humanize, w[1]] },
{:include_blank => true} %>
radio_buttons
?
- person Yshmarov; 16.12.2018