可以在使用选项字符串+ html_safe的同时为f.select设置选定值吗?

时间:2018-11-01 14:38:13

标签: 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>
  <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作为其币种,则该选项将不会被选择。

编辑: 不知道为什么我不知道其他地方对此有何回应时,为什么我会对此表示不满。这些问题中至少有100种,但都没有解决我所引用的问题。

2 个答案:

答案 0 :(得分:1)

您正在使它变得比实际需要的更加复杂。您甚至无需显式调用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] }

答案 1 :(得分:1)

我同意将选项列表作为纯字符串传递给class SomeClass<T extends (U extends any ? Constrained<T> : unknown), U = any> { prop!: Constrained<T>; method() { foo(this.prop); // okay now } } 帮助程序会以非常有限的方式使用Rails功能。不要破坏框架,让它为您完成所有繁重的工作。使用选项数组比使用字符串要容易得多。

回答您的问题:

  

但是,有没有一种方法可以使用如上所述的选项字符串+ html_safe来设置所选值?现在,如果用户在表单重新呈现该选项时选择class SomeClass<T extends (U extends any ? Constrained<T> : unknown), U = any> { prop!: T; method() { foo(this.prop as Constrained<T>); // I know what I'm doing! } } 作为其币种,则该选项将不会被选择。

是的,有可能:

select

但是,请参见答案顶部的注释。