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
5
A
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
3
È possibile farlo con CSS ...
= f.text_field :some_attribute, style: 'text-transform: capitalize;'
questo è sconsigliato, in quanto la logica campi trasformazione deve essere collocato nei modelli: "controllori sottili, modelli grassi" – caesarsol
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! –