2

我有这个collection_select <%= collection_select(:template, :template_id, @templates, :id, :name) %>,我想基本上打电话:name.humanize,但显然这不起作用。

如何调用诸如.humanizecollection_select 的属性(哈希属性?)

编辑

这是我的控制器的一个片段:

@templates = Template.select(:name).group(:name)
p "templates = #{@templates}"

以下是控制台中显示的内容:

"templates = #<ActiveRecord::Relation:0x007f84451b7af8>"
4

1 回答 1

7

带导轨 4

像这样:

<%= collection_select(:template, :template_id, @templates, :id, Proc.new {|v| v.name.humanize}) %>

Proc块中,v将是您的模型,通过each循环进行迭代。

collection_select适用于从 Proc 的内容继承Enumerable且没有限制的任何内容。

使用导轨 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) %>
于 2013-08-04T06:49:56.523 回答