Ruby on rails 在使用选项字符串+html\U安全时,是否可以为f.select设置选定值?

Ruby on rails 在使用选项字符串+html\U安全时,是否可以为f.select设置选定值?,ruby-on-rails,ruby,forms,Ruby On Rails,Ruby,Forms,我目前有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&g

我目前有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" }) %>
我意识到我可以为选择等使用选项,以便我可以使用选择:。但是,是否有一种方法可以使用如上所述的一系列选项+html\U安全设置所选值

现在,如果用户在表单重新提交时选择BRL作为其货币,则不会选择该选项

编辑:
我不知道为什么我会被否决,而我不知道其他地方会这么回答。这类问题至少有100个,但没有一个能解决我所指的问题

你让事情变得比实际需要的更复杂了。您甚至不需要显式地调用选项来选择或使用.html\u safe

要从任意列表中创建select,只需传递一个数组:

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

我同意将选项列表作为普通字符串传递给SelectHelper是以非常有限的方式使用Rails特性。不要与框架抗争,让它为你完成所有繁重的工作。使用选项数组比使用字符串容易得多

回答你的问题:

但是,是否有一种方法可以使用如上所述的一系列选项+html\U安全设置所选值?现在,如果用户在表单重新提交时选择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

但是,请看我在答案顶部的注释。

我很欣赏这个答案,但我没有尽力表达我理解这些方法的存在,我只是不想用那种方式手工写出所有三个选择,或者将它们保存在数据库中。这至少是一个小时的工作,我不想为一个辅助项目做前期工作,我假设一定有一种方法可以使用html,并且仍然让它选择users选项。我是rails的noob,与你的开场白相反,我实际上是想让它变得不那么复杂/耗时。
hash = { "AUD" => "(AUD) Australian Dollar", "BRL" => "(BRL) Brazilian Real" }
hash.map { |value, label| [label, value] }
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