我正在从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>
。
有人能告诉我如何使用活动记录将下拉列表中的值大写吗?
答案 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")