select()中的rails 3.0.10条件

时间:2015-04-01 22:17:58

标签: ruby-on-rails-3 select conditional

我有这个选择

<%= select("post", "field",@variable.all.collect) {|p| [ p.name, p.id ] }, :include_blank =>'blank')%>            

生成4个寄存器的下拉列表

我做了

{|p| [ p.name, p.id ] if helper_method(p.id) }

期待此输出:

blank
reg4

而是我得到了这个输出:

blank



reg4

我无法弄清楚如何获得预期的输出

1 个答案:

答案 0 :(得分:0)

@variable.all.collect {|p| [ p.name, p.id ] if helper_method(p.id) }会返回类似[["blank", 1],nil,nil,nil,["reg4", 2]]的内容,因为每次helper_method(p.id)条件都不满足时,它会向收集返回nil。这为您提供了nil值的空白选项,因此一个简单的解决方案是使用.compact

删除nils
@variable.all.collect {|p| [ p.name, p.id ] if helper_method(p.id) }.compact

还有其他方法,你可以避免首先返回nil,只是删除另一个传递中的选项:

@variable.all.collect {|p| [ p.name, p.id ] }.reject{|p| !helper_method(p1)}