Closed akam-it closed 7 years ago
You may write in Russian. It is ok.
Show me the controller source code and grid source code.
Спасибо, у меня, по-умолчанию фильтр показывает записи за несколько дней. Но я хочу сделать фильтр, который показывал бы все записи. Я пробую сделать это как-то так:
items_controller.rb
def index
@showall = params[:items_grid]['showall']
@items_grid = ItemsGrid.new(params[:items_grid]) do |scope|
scope.page(params[:page])
end
end
items_grid.rb
scope do
if(@showall == 'ALL')
Item
else
ids = Item.find_by_sql("SELECT * FROM items where actual_date <= CURDATE()+INTERVAL delivery_time day").map(&:id)
Item.where(id: ids)
end
end
............
filter(:showall, :enum, :select => %w(5days ALL), include_blank: false, dummy: true)
............
Я не понимаю почему ты делаешь это таким способом.
scope
не может быть использован так.... он задает базовый набор объектов, а фильтровать их можно только в фильтрах (что должно быть очевидно из названия). Зачем тебе find_by_sql
в данном случае мне тоже не понятно.
Вот правильный способ это сделать:
scope { Item}
filter(:showall, :enum, :select => %w(5days ALL), include_blank: false, default: '5days') do |value, scope|
if value == '5days'
scope.where("actual_date <= CURDATE()+INTERVAL delivery_time day")
end
end
Спасибо! Сделал так как вы написали
Hello!
How can I get params or variables from controller to grid? I tryed in controller @showall = params[:items_grid]['showall'] but in grid it become nil. In view it's ok.
Sorry, my rails not so good :( and English too :)