0

私は配列を持っています:

@positions = ["external_footer", "external_top_menu", "external_side_menu"]

オプションの人間化された値とオプション値の元の値を生成するように、選択ボックスを作成したいと思います。だから私はそのようなものが欲しい:

<option value="external_footer">External Footer</option>

今、私は次のようにやっています:

= f.input :位置、コレクション: @positions.collect{|位置| { position => position.humanize}}

しかし、うまくいきません。

4

3 に答える 3

3

私は解決策を見つけました:

= f.input :位置、コレクション: @positions.collect{|p| [p.humanize、p]}

于 2012-11-12T05:45:10.813 に答える
0

まず、構文が間違っている可能性があります。中かっこが 1 組余分にあります。試してみる= f.input :position, collection: @positions.collect{|position| position.humanize}= f.input :position, collection: @positions.collect(&:humanize)

SimpleForm を使用していると仮定すると、オプションのラベルと値に対してどのメソッドを呼び出すべきかがわからない可能性があります。here で:label_method説明されているように、 and を:value_method明示的に渡すかhumanize、ラムダとして渡してみてください。

于 2012-11-12T05:48:41.483 に答える
0

コントローラーにはあり@positionsますか?、そうでない場合は、変更する必要があると思います:

positions = ["external_footer", "external_top_menu", "external_side_menu"]

に:

@positions = ["external_footer", "external_top_menu", "external_side_menu"]

そして、これを試すことができます:

= f.input :position, collection: @positions.collect { |position| position.humanize }
于 2012-11-12T05:05:42.560 に答える