Witam, studiuje pozycję RailsSpace i dotarłem do obsługi błędów formularza rejestracyjnego. I tu sie rodzi problem, otóż… stworzona została obługa błędów w modelu user.rb, która jest następująca:
class User < ActiveRecord::Base
#Maksymalne i minimalne długości wszystkich pól
SCREEN_NAME_MIN_LENGTH = 4
SCREEN_NAME_MAX_LENGTH = 20
PASSWORD_MIN_LENGTH = 4
PASSWORD_MAX_LENGTH = 40
EMAIL_MAX_LENGTH = 50
SCREEN_NAME_RANGE = SCREEN_NAME_MIN_LENGTH..SCREEN_NAME_MAX_LENGTH
PASSWORD_RANGE = PASSWORD_MIN_LENGTH..PASSWORD_MAX_LENGTH
# Rozmiary pól tekstowych wyświetlanych w widokach
SCREEN_NAME_SIZE = 20
PASSWORD_SIZE = 10
EMAIL_SIZE = 30
#Przetłumaczone nazwy pól
HUMANIZET_ATTRIBUTES = {
:email => "Adres e-mail",
:screen_name => "Pseudonim",
:password => "Hasło",
}
#tłumaczy nazwy pól
def self.human_attribute_name(attr)
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
validates_uniqueness_of :screen_name, :email, :message => "jest już zajęty!"
validates_length_of :screen_name, :within => SCREEN_NAME_RANGE, :too_short => "jest zbyt krótki ! (minimum to #{SCREEN_NAME_MIN_LENGTH} znaki)", :too_long => "jest za długi! (maksimum to #{SCREEN_NAME_MAX_LENGTH} znaków)"
validates_length_of :password, :within => PASSWORD_RANGE, :too_short => "jest zbyt krótkie ! (minimum to #{PASSWORD_MIN_LENGTH} znaki)", :too_long => "jest za długie! (maksimum to #{PASSWORD_MAX_LENGTH} znaków)"
validates_length_of :email, :maximum => EMAIL_MAX_LENGTH, :message => "jest zbyt długi!"
validates_format_of :screen_name,
:with => /^[A-ZąćęłóśźżĄĆĘŁŃÓŚŹŻ0-9_]*$/i,
:message => "może zawierać tylko litery, " + "cyfry i znaki podkreślenia."
validates_presence_of :email,
:with => /^[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i,
:message => "musi być prawidłowym adresem email."
end
NASTĘPNIE ZOSTAŁ STWORZONY WIDOK W APP/VIEWS/USER/register.rhtml
REJESTRACJA
<% form_for :user do |form| %> Wypełnij poniższy formularz <div class="form_row">
<label for="screen_name"> Pseudonim: </label>
<%= form.text_field :screen_name, :size => User::SCREEN_NAME_SIZE, :maxlength => User::SCREEN_NAME_MAX_LENGTH %>
</div>
<div class="form_row">
<label for="email"> Adres e-mail: </label>
<%= form.text_field :email,
:size => User::EMAIL_SIZE,
:maxlength => User::EMAIL_MAX_LENGTH %>
</div>
<div class="form_row"
<label for="password"> Hasło: </label>
<%= form.text_field :password,
:size => User::PASSWORD_SIZE,
:maxlength => User::PASSWORD_MAX_LENGTH %>
</div>
<div class="form_row"
<%= submit_tag "Zarejestruj !", :class => "submit" %>
</div>
<% end %>
DO TEJ PORY WSZYSTKO CHODZI OKI (NIE WYSKAKUJA POWIADOMIENIA O BŁĘDACH W WYPEŁNIANIU FORMULARZA - ALE DO TEJ PORY TAK MA BYĆ).
DODATKOWO w pliku /helpers/application_helper.rb dodaje kod(początkowy plik byl pusty poza nazwą modułu):
Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
def error_messages_for (*params)
options = params.extract_options!.symbolize_keys
if object = options.delete(:object)
objects = [object].flatten
else
objects = params.collect {|object_name|instance_variable_get("@#{object_name}") }.compact
end
count = objects.inject(0) {|sum, object| sum + object.errors.count }
unless count.zero?
html = {}
[:id, :class].each do |key|
if options.include?(key)
value = options[key]
html[key] = value unless value.bank?
else
html[key] = ‘errorExplanation’
end
end
options[:object_name] ||= params.first
options[:header_message] = “#{count == 1 ? count.to_s + " błąd uniemożliwił” : count < 5 ? count.to_s + " błędy uniemożliwiły" : count.to_s + “błędów uniemożliwiło”} zapisanie
#{options[:object_name].to_s.gsub(’_’, ’ ')} " unless options.include?(:header_message)
options[:message] ||= ‘Problemy wystąpiły w następujących polach:’ unless options.include?(message)
error_messages = objects.map {|object|object.errors.full_messages.map {|msg| content_tag(:li, msg)}}
contents = ‘’
contents << content_tag(options[:header_tag] || :h2, options[:header_message]) unless options[:header_message].blank?
contents << content_tag(:p, options[:message]) unless options[:message].blank?
contents << content_tag(:ul, error_messages)
content_tag(:div, contents, html)
else
‘’
end
end
end
NASTĘPNIE KOLEŚ DODAJE WYŚWIETLANIE BŁĘDÓW W FORMULARZU, W NASTĘPUJĄCY SPOSÓB: DO PLIKU APP/VIEWS/USER/register.rhtml DODAJE LINIJKĘ KODU
.
.
.
=================> <%= error_messages_for “user”, :object_name = “użytkownika” %> <===================================(tą właśnie linijkę)
<div class="form_row">
<label for="screen_name"> Pseudonim: </label>
<%= form.text_field :screen_name, :size => User::S...
.
.
.
I niby według niego maja wyświetlać się błedy w formularzu !! Dodatkowo pokazuje to na zrzucie ekranu !! Pytanie podstawowe jakie mi sie narodziło to co to do cholery jest to “użytkownika” !!??
Proszę o POMOC bo siada mi już psycha…