我在選擇框中使用簡單表單。代碼在這裏:= f.input :dogs, collection: (0..7)
。在瀏覽器上進行渲染時,它將顯示值爲0到7的選擇框。我希望在選擇框下拉菜單中添加文本後面的值。例如:1只狗 - 2只狗。我試過但沒有工作。
請幫助我
我在選擇框中使用簡單表單。代碼在這裏:= f.input :dogs, collection: (0..7)
。在瀏覽器上進行渲染時,它將顯示值爲0到7的選擇框。我希望在選擇框下拉菜單中添加文本後面的值。例如:1只狗 - 2只狗。我試過但沒有工作。
請幫助我
您可以使用類似以下內容:
= f.input :dogs, options_for_select([["1 dog", 1], ["2 dogs", 1]])
= f.input :dogs, options_for_select((1..8).map{|x| x==1? ["#{x} dog",x] : ["#{x} dogs",x] })
一個非常簡單而優雅的解決辦法是這樣的:
創建一個輔助方法:
def humanize_dogs
0.upto(7).each_with_object({}) { |c, h| h[pluralize(c, 'dog')] = c }
end
# => {"0 dogs"=>0, "1 dog"=>1, "2 dogs"=>2, "3 dogs"=>3, "4 dogs"=>4, "5 dogs"=>5, "6 dogs"=>6, "7 dogs"=>7}
在表單中添加下一行:
= f.input :dogs, collection: humanize_dogs
這產生...
<select id="#" name="#">
<option value=""></option>
<option value="0">0 dogs</option>
<option value="1">1 dog</option>
<option value="2">2 dogs</option>
<option value="3">3 dogs</option>
<option value="4">4 dogs</option>
<option value="5">5 dogs</option>
<option value="6">6 dogs</option>
<option value="7">7 dogs</option>
</select>
謝謝,但我認爲這是答案:'= f.input:dogs,collection:((1..7).map {| x | x == 1?[「#{x} dog」,x]: [「#{x} dogs」,x]})' –
真的嗎?你不需要迭代來檢查值是1還是顯示一個字符串,你可以使用'pluralize'方法。 – backpackerhh
是的,完全同意。我的朋友談論了複數化方法,它完美地工作'= f.input:dogs,collection:(0..7).map {| count | [pluralize(count,'dog'),count]}'。謝謝。 –
太好了!稍微改變一下: '= f.input:dogs,collection:((1..7).map {| x | x == 1?[「#{x} dog」,x]:[「#{x }狗「,x]})' 非常感謝! –