Выбранный атрибут в зависимости от значения параметра с помощью Rails - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть действие, которое отображает представление, содержащее это:

<select id ='dynamic_select'>
  <option value = "<%= activity_path %>">All</option>
  <option value = "<%= activity_path(:type => 'enrolled') %>">Enrolled</option>
  <option value = "<%= activity_path(:type => 'redeem') %>">Redeem</option>
  <option value = "<%= activity_path(:type => 'social') %>">Social</option>
</select>

Каков будет правильный / рельсовый способ рендеринга, который выбирает и помечает как выбранный один из параметров в зависимости от параметра типа: Если есть параметр без типа , выберите опции «Все», если есть параметр type = enrolled , выберите параметр Enrolled и т. Д. ...

Мне удалось сделать это на стороне клиента с помощью Javascript, но мне интересно, как бы это сделал Rails.

Визуализированный HTML:

<select id="dynamic_select" name="dynamic_select">
<option value="/activity">All</option>
<option value="/activity?type=enrolled">Enrolled</option>
<option value="/activity?type=redeem">Redeem</option>
<option value="/activity?type=social">Social</option>
</select>

1 Ответ

1 голос
/ 28 февраля 2012

Что-то вроде следующего. Я отобразил здесь select_options, но вам, вероятно, следует сгенерировать их в вашем контроллере и передать их в представление.

Ключ использует options_for_select .

<% select_options = {"All" => activity_path} %>
<% %w{Enrolled Redeem Social}.each {|opt| select_options[opt] = activity_path(:type => opt.downcase)} %>
<% form_for(resource) do |f| %>
  <%= s.select :dynamic, options_for_select(select_option, :selected => select_options[@default || "All"]) %>
<% end %>
...