2011-02-09 3 views
5

Ho un form_for e voglio che qualsiasi valore all'interno di x.textField appaia con la prima lettera in Upcase (sto parlando della modifica in cui il campo di testo è precompilato dai valori db).Capitalize f.text_field

risposta

6

È possibile sfruttare in questo modo:

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

soluzione di Pan Thomakos funzionerà, ma se non si vuole avere per aggiungere :value => f.object.name.capitalize ad ogni campo di testo nel modulo, si potrebbe guardare in scrittura del proprio FormBuilder.

mettere da qualche parte nel vostro percorso di carico, come 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 

Usage:

<% 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

si può anche fare questo in azione creare/aggiornare controller come come indicato di seguito

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

questo è sconsigliato, in quanto la logica campi trasformazione deve essere collocato nei modelli: "controllori sottili, modelli grassi" – caesarsol

+1

hai ragione, ma qui per la semplicità hanno appena spiegare l'idea che come si può sfruttare. è per questo che è meglio mettere le cose insieme come un quadro completo che cosa sta succedendo! –

3

È possibile farlo con CSS ...

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