在collection_select上使用大写

如果在我找不到它之前已经回答了这个问题。

我有以下内容:

= f.collection_select :sex_id, @sexes, :id, :name 

这在控制器中:

 @sexes = Sex.all 

性别都以小写forms存储,如下所示:

 id|name 1|steer 2|heifer 3|holstein 

我需要他们用Capital First字母输出:

 Steer Heifer Holstein 

我试过了:

 = f.collection_select :sex_id, @sexes, :id, :name.capitalize = f.collection_select :sex_id, @sexes, 'id', 'name'.capitalize 

但它们不起作用,我并没有真正期待它们,但在发布之前不得不尝试它们。

collection_select在每个对象上调用一个方法来获取选项值的文本。 您可以在模型中添加新方法以获得正确的值:

 def name_for_select name.capitalize end 

然后在视图中:

 = f.collection_select :sex_id, @sexes, :id, :name_for_select 

您的初始尝试不起作用的原因是您试图将表示字段名称的符号或字符串大写,而不是实际变量。

您可以执行类似的操作,然后在将数据发送到视图之前将数据大写。

 @sexes = Sex.all @sexes = @sexes.each{|sex| sex.name.capitalize} 

要么

 @sexes = Sex.all.each{|sex| sex.name.capitalize} 

在RoR4中执行此操作的更简单方法是使用humanize方法。 因此,您的视图代码如下所示:

 = f.collection_select :sex_id, @sexes, :id, :humanize 

不需要任何额外的方法!