У меня есть индексная страница, отображающая все поездки в базе данных. В верхней части страницы находится фильтр с раскрывающимися списками, в котором вы можете выбрать категорию, регион или оба, чтобы отфильтровать результаты.Сброс выпадающего списка до выбранного значения
Когда вы выберете свой выбор и нажмите «показать», выпадающие списки вернутся к умолчанию по умолчанию «Все категории» и «Все регионы».
Как я могу получить выбранную опцию для отображения в раскрывающемся списке при фильтрации результатов?
Вот мой выпадающее меню:
.row
= form_tag all_road_trips_path, id: 'filter-trips-form', method: :get do
.select-intro
Browse
.select-wrapper.trip-categories
= collection_select(:category, :id, Category.all, :id, :name, :prompt => "All categories")
.select-intro
trips for
.select-wrapper
= collection_select(:region, :id, Region.all, :id, :name, :prompt => "All regions")
.select-button
= submit_tag 'Show Trips', class: 'button square'
EDIT ::
Я попытался добавить значение selected
и получил 'неопределенный метод `[]' для ноль: ошибка NilClass'. Я думал, что это связано с тем, что первое значение моего раскрывающегося списка было «Все категории», а не фактически являлось объектом в db, что лишено идентификатора. Вот обновленный код и сервер вывод:
.row
= form_tag all_road_trips_path, id: 'filter-trips-form', method: :get do
.select-intro
Browse
.select-wrapper.trip-categories
= collection_select(:category, :id, Category.all, :id, :name, :prompt => "All categories", :selected => params[:category][:id])
.select-intro
trips for
.select-wrapper.trip-regions
= collection_select(:region, :id, Region.all, :id, :name, :prompt => "All regions", :selected => params[:region][:id])
.select-button
= submit_tag 'Show Trips', class: 'button square'
И
Started GET "/road-trips/all" for 127.0.0.1 at 2014-01-10 14:03:39 -0600
Processing by RoadTripsController#all as HTML
Category Load (0.4ms) SELECT "categories".* FROM "categories"
Rendered road_trips/_trip_filter.html.haml (4.7ms)
Rendered road_trips/all.html.haml within layouts/application (5.6ms)
Completed 500 Internal Server Error in 9ms
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
NoMethodError - undefined method `[]' for nil:NilClass:
app/views/road_trips/_trip_filter.html.haml:6:in `block in _app_views_road_trips__trip_filter_html_haml__2571960046883419269_70320079055780'
haml (3.1.8) lib/haml/helpers/action_view_mods.rb:162:in `block (2 levels) in form_tag_with_haml'
Отличное объяснение. Единственная проблема заключается в том, что первое приглашение «Все категории» или «Все регионы» не является категорией или регионом в базе данных, поэтому у него нет идентификатора.Поэтому, когда я пытаюсь загрузить страницу, я получаю «неопределенный метод» [] 'для nil: NilClass. Но если выбор уже сделан, он загружается отлично и работает, как вы объяснили. Спасибо. – reknirt
Это не то, что вызывает эту ошибку. : prompt и: select хорошо работают вместе, даже один из параметров приглашения не имеет значения. Если вы хотите, вы можете опубликовать код вида, вызывающий это, а также ошибку и первые несколько строк обратной линии – DiegoSalazar
Я отредактировал свое оригинальное сообщение. Огромное спасибо. – reknirt