使用simple_form的大写集合

时间:2013-10-15 18:21:31

标签: ruby-on-rails ruby-on-rails-3 collections ruby-on-rails-4 capitalize

如何在下面的代码示例中将国家/地区列表的第一个字母大写? 我的问题是关于simple_form,而不是一个可以使用collection_select的常规表单。

    = p.input :state,
              :readonly => "readonly",
              :collection => DataState.where(:country => "1"),
              :selected => 1,
              :id => "state",
              :name => "state",
              :prompt => "Please choose"

问题是状态列表在数据库中并保存为“alamaba”,“new york” 我需要它在数据库中被放下,但是为了清晰起见,我想将第一个字母大写/大写。

2 个答案:

答案 0 :(得分:3)

试试这个:

在DataState模型中,添加一个显示州名称大写版本的方法

class DataState < ActiveRecord::Base
  def capitalized_state
    state.capitalize
  end
end

然后使用这种新方法列出您的选择

根据您是否尝试将状态的id保存为关联或仅仅是字符串,erb将是

<%= f.input :state, collection: DataState.where(:country => "1").pluck(:capitalized_state) %>

<%= f.input :state, collection: DataState.where(:country => "1"), value_method: :id, label_method: :capitalized_state %>

前者用于州名,后者用于关联ID。

请参阅:using capitalize on a collection_select

编辑:我注意到你的html没有指定你正在使用的DataState类的哪个属性作为你选择的文本。如果您正在使用rails,则应查看collection_select表单助手。

答案 1 :(得分:0)

另一种方法是添加 css 的 text-transform: uppercase 属性,如下所示:

<% = f.input: state, collection: DataState.where (: country => "1"), style: 'text-transform: uppercase;' %>