我有这个collection_select <%= collection_select(:template, :template_id, @templates, :id, :name) %>
,我想基本上打电话给:name.humanize
,但显然这不起作用。
如何在collection_select属性(散列属性?)上调用.humanize
等方法
修改
以下是我的控制器的片段:
@templates = Template.select(:name).group(:name)
p "templates = #{@templates}"
以下是控制台中显示的内容:
"templates = #<ActiveRecord::Relation:0x007f84451b7af8>"
答案 0 :(得分:7)
使用Rails 4
就像这样:
<%= collection_select(:template, :template_id, @templates, :id, Proc.new {|v| v.name.humanize}) %>
在Proc
区块中,v
将成为您的模型,通过each
循环进行迭代。
collection_select
适用于从Enumerable
继承的任何内容,并且对Proc的内容没有限制。
使用Rails 3
您必须自行完成,方法是在将数据传递给collection_select
# This will generate an Array of Arrays
values = @templates.map{|t| [t.id, t.name.humanize]}
# [ [record1.id, record1.name.humanize], [record2.id, record2.name.humanize], ... ]
# This will use the Array previously generated, and loop in it:
# - send :first to get the value (it is the first item of each Array inside the Array)
# - send :last to get the text (it is the last item of each Array inside the Array)
# ( we could have use :second also )
<%= collection_select(:template, :template_id, values, :first, :last) %>