使用 collection_select

Posted

技术标签:

【中文标题】使用 collection_select【英文标题】:using capitalize on a collection_select 【发布时间】:2011-05-12 19:39:16 【问题描述】:

如果在我找不到之前已经回答了。

我有以下几点:

= 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

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

【问题讨论】:

我心中的威斯康星人问为什么你要把两种性别和一个品种混在一起。数据不好! ;-) 我的公司就是这么奇怪,但是在一个可以在数据库中有“动物性行为”并且没有人认为你已经失去它的行业工作很酷。 【参考方案1】:

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

def name_for_select
  name.capitalize
end

然后在视图中:

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

【讨论】:

非常感谢,这很干净,很容易。【参考方案2】:

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

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

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

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

【讨论】:

我应该想到这个......虽然,其他解决方案更清洁。谢谢你的回答。 是的,在我看到另一个答案后,我有点踢自己。太容易了:P【参考方案3】:

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

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

不需要任何额外的方法!

【讨论】:

以上是关于使用 collection_select的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)