【问题标题】:using capitalize on a collection_select使用 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

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

【问题讨论】:

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

标签: ruby-on-rails collections 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

不需要任何额外的方法!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多