Screencast: Clientseitige Validierung von Formularen

Clientseitige Validierung, also die Überprüfung von eingegebenen Werten innerhalb des Webbrowsers, können dem Benutzer bereits bei der Eingabe über die Korrektheit der Daten informieren. Dies kann unter Umständen den einen oder anderen Korrigier-Zyklus ersparen. Wie dies innerhalb von Rails eingesetzt werden kann zeigt Ryan diese Woche anhand eines gems, welches die Entwicklung erleichtert.

 

Download:

Download(20.2 MB, 8:42)
Alternativer Download für iPod & Apple TV(19.3 MB, 8:42)

 

Resourcen:

 

Quellcode:

[bash]
bundle
rails g client_side_validations:install
[/bash]

[ruby]
# Gemfile
gem ‚client_side_validations‘

# models/user.rb
validates_uniqueness_of :username, :email
validates :email, :email_format => true

# lib/email_format_validator.rb
class EmailFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i
object.errors.add(attribute, :email_format, options)
end
end
end

# config/application.rb
config.autoload_paths << "#{config.root}/lib"
[/ruby]

[html]
<!– users/_form.html.erb –>
<%= form_for @user, :validate => true do |f| %>

<!– layouts/application.html.erb –>
<%= javascript_include_tag :defaults, "rails.validations", "rails.validations.custom" %>
[/html]

[text]
# locals/en.yml
en:
errors:
messages:
email_format: "is not formatted properly"
[/text]

[javascript]
/* rails.validations.custom.js */
clientSideValidations.validators.local["email_format"] = function(element, options) {
if (!/^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i.test(element.val())) {
return options.message;
}
}
[/javascript]

Screencast: Validieren mit Rails 3

Rails 3 bietet viel Neues bzgl. Validierungen. Ryan zeigt diese Woche wie die Neuerungen benutzt und komplexe Validierungen aufgeräumt werden können.

 

Download:

Download (14.4 MB, 9:53)
Alternativer Download für iPod & Apple TV (14.3 MB, 9:53)

 

Resourcen:

 

Quellcode:

[bash]
gem install rails –pre
gem cleanup
rails store
cd store
rails g scaffold user name:string email:string
rake db:migrate
[/bash]

[html]
<!– users/_form.html.erb –>
<%= form_for(@user) do |f| %>
<%= render "shared/error_messages", :target => @user %>

<div class="field">
<%= f.label :name %><%= mark_required(@user, :name) %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %><%= mark_required(@user, :email) %><br />
<%= f.text_field :email %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

<!– shared/_error_messages.html.erb –>
<% if target.errors.any? %>
<div id="errorExplanation">
<h2><%= pluralize(target.errors.count, "error") %> prohibited this record from being saved:</h2>
<ul>
<% target.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
[/html]

[ruby]
# application_helper.rb
def mark_required(object, attribute)
"*" if object.class.validators_on(attribute).map(&:class).include? ActiveModel::Validations::PresenceValidator
end

# models/user.rb
validates :email, :presence => true, :uniqueness => true, :email_format => true

# lib/email_format_validator.rb
class EmailFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i
object.errors[attribute] << (options[:message] || "is not formatted properly")
end
end
end
[/ruby]