将下拉(选项)值大写

时间:2015-11-17 11:46:47

标签: ruby-on-rails ruby ruby-on-rails-3

我正在从DB中检索值并将其绑定在haml中。我试图在下拉选项中大写值。

models.rb

class EnumValue < ActiveRecord::Base

  attr_accessible :enum_type, :name, :gdsn
  scope :countries, EnumValue.where(enum_type: "country").order(:name)
end

form.html.haml

.offset1.span2
        = f.association :country, :collection => EnumValue.countries,:include_blank => "Select Country",:label => "Country of Origin",:selected =>@records.country_id ? @records.country_id, :input_html => {:onchange =>"setGdsnName(this.value,'country')"}

我尝试使用haml中的EnumValue.countries.capitalize调用大写,我收到以下错误:undefined method capitalize for # ActiveRecord::Relation:0x123d0718>

有人能告诉我如何使用活动记录将下拉列表中的值大写吗?

2 个答案:

答案 0 :(得分:5)

使用map capitalize数组中的每个值:

EnumValue.countries.map(&:capitalize)

您的用例titleize的顺便说一句可能是更好的选择,因为它可以处理包含多个单词的国家/地区名称:

"United States".capitalize
#=> "United states"

鉴于:

"United States".titleize
#=> "United States"

此外,您需要从返回的集合中获取国家/地区名称,因为countries不会返回国家/地区名称数组,而是EnumValue的实例:

EnumValue.countries.map { |c| [c.name.titleize, c.id] }

答案 1 :(得分:1)

如果您在titleized_contries中定义了EnumValue方法:

def titleized_contries
  countries.map(&:titleize)
end

您可以优雅地使用collection_select

f.collection_select(:country, EnumValue.countries, :id, titleized_contries, include_blank: "Select Country", label: "Country of Origin")