Форма Rails (выбрать/опция) - как пометить выбранную опцию с помощью HAML?

Каков самый быстрый и элегантный способ пометить текущее выбранное значение параметра в форме в HAML?

%form{:action => '', :method => 'get'}
   %select{:name => 'param_name'}
      %option{:value => 'A'} A data
      %option{:value => 'B'} B data

В одну сторону:

- if params[:param_name] == "A"
  %option{:value => 'A', :selected => 'selected'} A data
- else
  %option{:value => 'A'} A data

но это неуместно, когда в поле select будет много полей параметров...


person user984621    schedule 02.10.2012    source источник


Ответы (2)


Что-то вроде этого будет работать (используя старый «синтаксис hashrocket» с оператором =>)

%select
  %option{:value => "a", :selected => params[:x] == "a"}= "a"
  %option{:value => "b", :selected => params[:x] == "b"}= "b"

Или в более новых версиях Ruby (1.9 и выше):

%select
  %option{value: "a", selected: params[:x] == "a"}= "a"
  %option{value: "b", selected: params[:x] == "b"}= "b"
person egze    schedule 02.10.2012
comment
что делает selected:params[:x]? - person jpganz18; 09.05.2013
comment
выбранное значение по умолчанию. значение для выбранного может быть истинным или ложным (которое оценивается ==) - person msanjay; 11.06.2014

Вы должны раскрыть всю мощь хелперов rails.

Для тега select:

= select_tag :param_name, options_for_select([['A data', 'A'], ['B data', 'B']], params[:param_name])

Кроме того, вместо raw %form используйте form_tag или лучше form_for, когда это возможно (или лучше simple_form или formtastic).

person Mik    schedule 02.10.2012
comment
Этот ответ, безусловно, предпочтительнее написания необработанной разметки формы в представлениях, если вы можете использовать помощники формы. - person Brett Bender; 31.10.2013
comment
люблю, ответ был бы лучше, если бы у него был пример его переноса в form_tag или form_for, синтаксис HAML довольно раздражает своим отступом - person ; 03.02.2016