2014-09-12 59 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 -%>