我有这个选择
<%= 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
我无法弄清楚如何获得预期的输出
答案 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
@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)}