Можно установить выбранное значение для f.select, используя строку параметров + html_safe? - PullRequest
0 голосов
/ 01 ноября 2018

В настоящее время у меня есть 3 варианта HTML для: валюты, часового пояса и страны. Валюта выглядит так:

<%= f.select(:currency_code, '
  <option selected>Select Currency</option>
  <option value="AUD">(AUD) Australian Dollar</option>
  <option value="BRL">(BRL) Brazilian Real</option>
  <option value="CAD">(CAD) Canadian Dollar</option>
  <option value="CZK">(CZK) Czech Koruna</option>
  <option value="DKK">(DKK) Danish Krone</option>
  <option value="EUR">(EUR) Euro</option>
  <option value="HKD">(HKD) Hong Kong Dollar</option>
  <option value="HUF">(HUF) Hungarian Forint</option>
  <option value="ILS">(ILS) Israeli New Sheqel</option>
  <option value="JPY">(JPY) Japanese Yen</option>
  <option value="MYR">(MYR) Malaysian Ringgit</option>
  <option value="MXN">(MXN) Mexican Peso</option>
  <option value="NOK">(NOK) Norwegian Krone</option>
  <option value="NZD">(NZD) New Zealand Dollar</option>
  <option value="PHP">(PHP) Philippine Peso</option>
  <option value="PLN">(PLN) Polish Zloty</option>
  <option value="GBP">(GBP) Pound Sterling</option>
  <option value="SGD">(SGD) Singapore Dollar</option>
  <option value="SEK">(SEK) Swedish Krona</option>
  <option value="CHF">(CHF) Swiss Franc</option>
  <option value="TWD">(TWD) Taiwan New Dollar</option>
  <option value="THB">(THB) Thai Baht</option>
  <option value="TRY">(TRY) Turkish Lira</option>
  <option value="USD">(USD) U.S. Dollar</option>'.html_safe, {}, { class: "form-control" }) %>

Я понимаю, что могу использовать options_for_select и т. Д., Чтобы я мог использовать selected:. Однако есть ли способ установить выбранное значение, используя строку параметров + html_safe, как указано выше?

Прямо сейчас, если пользователь выбирает BRL в качестве своей валюты, когда форма повторно отображает этот параметр не будет выбран.

редактирование: Не уверен, почему меня опускают, когда я не знаю, что на SO так и есть ответ. Есть как минимум 100 таких вопросов, но ни один из них не касается того, на что я ссылаюсь.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я согласен, что передача списка опций в виде простой строки в select helper очень ограниченно использует возможности Rails. Не боритесь с рамками, пусть он сделает всю тяжелую работу за вас. Работать с массивами опций намного проще, чем со строкой.

Отвечая на ваш вопрос:

Однако есть ли способ установить выбранное значение, используя строку параметров + html_safe, как указано выше? Прямо сейчас, если пользователь выбирает BRL в качестве своей валюты, когда форма повторно отображает, этот параметр не будет выбран.

Да, это возможно:

currency = 'BRL'
options = '
  <option selected>Select Currency</option>
  <option value="AUD">(AUD) Australian Dollar</option>
  <option value="BRL">(BRL) Brazilian Real</option>
  <option value="CAD">(CAD) Canadian Dollar</option>
  <option value="CZK">(CZK) Czech Koruna</option>
  <option value="DKK">(DKK) Danish Krone</option>
  <option value="EUR">(EUR) Euro</option>
  <option value="HKD">(HKD) Hong Kong Dollar</option>
  <option value="HUF">(HUF) Hungarian Forint</option>
  <option value="ILS">(ILS) Israeli New Sheqel</option>
  <option value="JPY">(JPY) Japanese Yen</option>
  <option value="MYR">(MYR) Malaysian Ringgit</option>
  <option value="MXN">(MXN) Mexican Peso</option>
  <option value="NOK">(NOK) Norwegian Krone</option>
  <option value="NZD">(NZD) New Zealand Dollar</option>
  <option value="PHP">(PHP) Philippine Peso</option>
  <option value="PLN">(PLN) Polish Zloty</option>
  <option value="GBP">(GBP) Pound Sterling</option>
  <option value="SGD">(SGD) Singapore Dollar</option>
  <option value="SEK">(SEK) Swedish Krona</option>
  <option value="CHF">(CHF) Swiss Franc</option>
  <option value="TWD">(TWD) Taiwan New Dollar</option>
  <option value="THB">(THB) Thai Baht</option>
  <option value="TRY">(TRY) Turkish Lira</option>
  <option value="USD">(USD) U.S. Dollar</option>'

options.sub(' selected', '').sub(%r{("#{currency}")}, '\1 selected').html_safe

Тем не менее, см. Мою заметку вверху моего ответа.

0 голосов
/ 01 ноября 2018

Вы делаете это более сложным, чем это должно быть на самом деле. Вам даже не нужно явно вызывать options_for_select или использовать .html_safe.

Чтобы создать выборку из произвольного списка, вы можете просто передать массив:

<%= f.select(:currency_code, ["AUD", "BRL"]) %>

Если вы хотите разные значения и метки, тогда передайте массив пар:

<%= f.select(:currency_code, [["(AUD) Australian Dollar", "AUD"], ["(BRL) Brazilian Real", "BRL"]]) %>

Если у вас есть валюты, объявленные как хеш, вы можете преобразовать их в набор пар с помощью:

hash = { "AUD" => "(AUD) Australian Dollar", "BRL" => "(BRL) Brazilian Real" }
hash.map { |value, label| [label, value] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...