2011-02-09 47 views
5

我有一個form_for,我希望x.textField中的任何值都以Upcase中的第一個字母出現(我正在討論編輯文本字段由db值預填的地方)。大寫f.text_field

回答

6

你可以利用它像這樣:

<%= form_for ... do |f| %> 
    <%= f.text_field :name, :value => f.object.name.capitalize %> 
2

潘Thomakos的解決方案將工作,但如果你不希望有添加:value => f.object.name.capitalize到每個文本字段的形式,你可以看看寫你自己的FormBuilder。

將這個地方在你的負載路徑,像LIB/capitalizing_form_builder.rb

class CapitalizingFormBuilder < ActionView::Helpers::FormBuilder 

    def text_field(method, options = {}) 
    @object || @template_object.instance_variable_get("@#{@object_name}") 

    options['value'] = @object.send(method).to_s.capitalize 

    @template.send(
     "text_field", 
     @object_name, 
     method, 
     objectify_options(options)) 
    super 
    end 

end 

用法:

<% form_for(@post, :builder => CapitalizingFormBuilder) do |f| %> 

    <p> 
    <%= f.text_field :title %> 
    </p> 
    <p> 
    <%= f.text_field :description %> 
    </p> 
    <p> 
    <%= f.submit 'Update' %> 
    </p> 

<% end %> 
0

你也可以做到這一點像下面

給出控制器的創建/更新動作
def create 

    @user = User.new(params[:user]) 
    @user.name = params[:user][:name].capitalize 

    if @user.save 
    #do something 
    else 
    #do something else 
    end 

end 
+0

這是氣餒,因爲字段轉換邏輯應放置在模型中:「瘦控制器,胖模型」 – caesarsol 2015-02-03 13:02:46

3

你可以用CSS做這個...

= f.text_field :some_attribute, style: 'text-transform: capitalize;'