【问题标题】:Uppercase collection with simple_form带有 simple_form 的大写集合
【发布时间】:2013-10-23 16:15:16
【问题描述】:

在下面的代码示例中,如何将国家/地区列表的第一个字母大写? 我的问题是关于 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”一样保存 我需要在数据库中将其小写,但为了清晰起见,我想将第一个字母大写/大写。

【问题讨论】:

  • 显而易见的解决方案似乎像titleize...某处:p - :collection => DataState.where(:country => "1").titleize 有什么作用吗?/你玩过吗?

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


【解决方案1】:

试试这个:

在您的 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 表单助手。

【讨论】:

  • 谢谢我测试,如果工作奖励,我使用 simple_form 不确定 collection_select 和 simple_form
  • 好的测试这似乎适用于常规但需要它在 simple_form 中工作。重新编辑问题以使这一点更清楚
  • @Rubytastic 已编辑。试一试。
  • 效果很好,没想到你能做到这么棒!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多