2014-09-12 33 views
2

我想通过一个块到栏select字段帮助器生成选项与data属性,但它会导致错误。我做错了吗?Rails选择字段助手与块不按预期工作

我的(简化的)例子失败代码看起来是这样的:

<%= f.select :item do 
     Item.all.each do |item| 
     content_tag(:option, item.title) 
     end 
    end %> 

的错误是:undefined method 'empty?' for nil:NilClass。它来自@choices,在this line of actionview上为零。

这是Rails为提交使用块的能力:

https://github.com/rails/rails/commit/57bf92c6de125adc45bb006115d22d07270618b3 https://github.com/rails/rails/commit/1c6bcefe7e87e1b9c7b2177717bbdc3986806391(DOC)

的文档表明,它应该工作,因为我有它。我错过了什么?谢谢!

回答

0

试试这个:

<%= f.select :item do 
    Item.all.collect do |item| 
    [item.title, item.id] 
    end 
end %> 

或指的doc

+0

你尝试你的代码?它给出了同样的错误。任何数组或枚举器都会导致相同的错误。我在问题中发布的代码是'available_campaigns'文档示例结尾的块示例的简化版本。 – 2014-09-12 13:01:03

1

有相同的问题,并花了几个小时在围栏中挖掘,直到我有一个很好的看待测试案例。因此,对于谁比谁有同样的问题在这里结束的利益......

诀窍是块使用concat

<%= f.select :item do 
    Item.all.each do |item| 
    concat content_tag(:option, item.title) 
    end 
end %> 

看起来像例子中的文档是错误的。

0

移动线成单独的ERB块,是明确哪些线路输出:

<%= f.select :item do %> 
    <%- Item.all.each do |item| -%> 
    <%= content_tag(:option, item.title) %> 
    <%- end -%> 
<%- end -%>