8

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

我有以下内容:

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

这在控制器中:

@sexes = Sex.all

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

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

我需要他们输出大写首字母:

Steer
Heifer
Holstein

我试过:

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

但是它们不起作用,我真的没想到它们会起作用,但是在发布之前必须尝试一下。

4

3 回答 3

8

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

def name_for_select
  name.capitalize
end

然后在视图中:

= f.collection_select :sex_id, @sexes, :id, :name_for_select
于 2010-11-19T19:17:02.547 回答
0

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

你可以做这样的事情,然后数据在发送到视图之前会被大写。

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

或者

@sexes = Sex.all.each{|sex| sex.name.capitalize}
于 2010-11-19T19:02:39.483 回答
0

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

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

不需要任何额外的方法!

于 2014-07-03T20:38:48.003 回答