Tienes un formulario del siguiente estilo:
<% form_for :user do |f| %>
<fieldset>
<p>
<label>Login</label><br/>
<%= f.text_field :login %>
</p>
<p>
<label>Password</label><br/>
<%= f.password_field :password %>
</p>
</fieldset>
<% end %>
<fieldset>
<p>
<label>Login</label><br/>
<%= f.text_field :login %>
</p>
<p>
<label>Password</label><br/>
<%= f.password_field :password %>
</p>
</fieldset>
<% end %>
Quedaría más limpio así:
<% form_for :user, :builder=>LabeledFormBuilder do |f| %>
<fieldset>
<%= f.text_field :login, :label=>"Login" %>
<%= f.password_field :password, :label=>"Password" %>
</fieldset>
<% end %>
<fieldset>
<%= f.text_field :login, :label=>"Login" %>
<%= f.password_field :password, :label=>"Password" %>
</fieldset>
<% end %>
Todo lo que tienes que hacer es crearte una clase en app/builders:
class LabeledFormBuilder < ActionView::Helpers::FormBuilder
helpers = field_helpers +
%w{date_select datetime_select time_select} +
%w{collection_select select country_select time_zone_select} -
%w{hidden_field label fields_for} # Don't decorate these
helpers.each do |name|
define_method(name) do |field, *args|
options = args.last.is_a?(Hash) ? args.pop : {}
label = label(field, options[:label], :class => options[:label_class])
@template.content_tag(:p, label +'
' + super) #wrap with a paragraph
end
end
end
helpers = field_helpers +
%w{date_select datetime_select time_select} +
%w{collection_select select country_select time_zone_select} -
%w{hidden_field label fields_for} # Don't decorate these
helpers.each do |name|
define_method(name) do |field, *args|
options = args.last.is_a?(Hash) ? args.pop : {}
label = label(field, options[:label], :class => options[:label_class])
@template.content_tag(:p, label +'
' + super) #wrap with a paragraph
end
end
end
y añadir a tu config/environment.rb:
config.load_paths += %W( #{RAILS_ROOT}/app/builders)
Si quieres que por defecto todos tus formularios usen este builder, inicializa en application_helper o en algun initializer:
ActionView::Base.default_form_builder = LabeledFormBuilder
No hay comentarios:
Publicar un comentario