Próbowałem zrobić porządek z formularzem i … prawie mi się udało Tutaj oryginalny formularz: http://rubyonrails.pl/forum/t6565-Formularz-rejestracji.
W skrócie. Stworzyłem nowy form builder:
[code=ruby]class BootstrapFormBuilder < ActionView::Helpers::FormBuilder
delegate :content_tag, to: :@template
%w[text_field email_field password_field].each do |method_name|
define_method(method_name) do |name, *args|
options = args.extract_options!
options[:class] = options[:class] || ‘form-control’
args.push(options)
form_css = ['form-group']
form_css << 'has-error' unless object.errors[name].blank?
if object.errors[name].blank?
errors = ''
else
errors = content_tag :ul, class: "errors" do
object.errors.full_messages_for(name).map do |err|
content_tag(:li,err)
end.join.html_safe
end
end
content_tag :div, class: form_css do
label(name) + super(name, *args) + errors
end
end
end
end[/code]
Formularz teraz wygląda tak:
[code=ruby] <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), builder: BootstrapFormBuilder) do |f| %>
<%= f.text_field :username, :autofocus => true %>
<%= f.email_field :email %>
<%= f.password_field :password %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Sign up", class: "btn btn-default" %>
<% end %>[/code]
Wszystko ładnie działa. Ostatnia rzecz jaką chciałem zrobić to zamienić:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), builder: BootstrapFormBuilder) do |f| %>
na
<%= bootstrap_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
W application helperze dałem:
def bootstrap_form_for(record, options = {}, &block)
options[:builder] = BootstrapFormBuilder
form_for(record, options = {}, &block)
end
Niestety nie działa, dostaję błąd: undefined method `users_path’ for #<#Class:0x0000000572cf90:0x00000005427930> w widoku w linijce wywołania ‘bootstrap_form_for’
Dodam, że to jest formularz rejestracji użytkownika (devise).
Macie jakieś pomysły co jest nie tak?