2012-11-12 41 views
0

创建用于选择菜单的哈希我有一个数组:Ruby on Rails的:从阵列

@positions = [ “external_footer”, “external_top_menu”, “external_side_menu”]

我想要创建一个选择框,以便它产生选项的人性化值和选项值的原始值。所以,我想这样的事情:

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

现在我做它像这样:

= f.input:位置,收藏:@ positions.collect {|位置| {position => position.humanize}}

但它不起作用。

+0

介意解释它如何不起作用?它是否会崩溃或不显示任何内容或不会人性化文本?你也使用SimpleForm? –

+0

它不会给我一个错误,我只是产生“external_footer”=>外部页脚作为选择框的文本... –

回答

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 } 
+0

对不起,我在我的示例代码中做了一个错字,我把“位置”变量设置为全局。 –

3

我找到了一个解决方案:

= f.input:position,collection:@ positions.collect {| p | [p.humanize,p]}

0

首先,你的语法可能是错误的 - 你有一对额外的大括号。尝试= f.input :position, collection: @positions.collect{|position| position.humanize}= f.input :position, collection: @positions.collect(&:humanize)

假设您使用SimpleForm,有可能它不知道调用选项标签和值的方法。尝试明确传递:label_method:value_method,或将humanize作为lambda传递,如here所述。