多元化收集

时间:2014-03-19 08:01:55

标签: ruby-on-rails-3 simple-form

我需要帮助

我使用简单的形式选择框。代码在这里:= f.input :dogs, collection: (0..7)。在浏览器上渲染时,它将显示值为0到7的选择框。我希望在选择框下拉列表后添加文本。例如:1只狗 - 2只狗。我试过但不行。

请帮助我

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

= 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] })

答案 1 :(得分:0)

一个非常简单和优雅的解决方案可能是这样的:

创建辅助方法:

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>