`
sillycat
  • 浏览: 2557407 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Rails Study(VIII)Validation and Errors

阅读更多
Rails Study(VIII)Validation and Errors

7. Working with Validation Errors
7.1 errors
Returns an OrderedHash with all errors. Each key is the attribute name and the value is an array of strings with all errors.
>>person = Person.new
=> #<Person id: nil, name: nil, created_at: nil, updated_at: nil>
>> person.errors[:name]
=> []
>> person.valid?
=> false
>> person.errors[:name]
=> ["can't be blank", "is too short (minimum is 2 characters)"]

7.2 errors[]
7.3 errors.add
The add method lets you manually add messages that are related to particular attributes.
errors.full_messages to view the messages in the form.
validate :a_method_used_for_validation_purposes
 
  def a_method_used_for_validation_purposes
    errors.add(:name, "cannot contain the characters !!!") if
      name == '!!!'
  end

>> p = Person.create(:name => "!!!")
=> #<Person id: nil, name: "!!!", created_at: nil, updated_at: nil>
>> p.errors[:name]
=> ["cannot contain the characters !!!"]
>> p.errors.full_messages
=> ["Name cannot contain the characters !!!"]

7.4 errors[:base]
No matter with the attributes, we can say the object is invalid with :base
def a_method_used_for_validation_purposes
  errors[:base] << "This person is invalid because ..."
end

7.5 errors.clear
.clear can clean all the messages.
person = Person.new
person.valid? #=> false
person.errors[:name]
# => [ "can't be blank", "is too short"]
person.errors.clear
person.errors.empty? # => true

7.6 errors.size
>> person = Person.new
=> #<Person id: nil, name: nil, created_at: nil, updated_at: nil>
i=> false
>> person.errors.size
=> 2
>> person = Person.new(:name => "carl2")
=> #<Person id: nil, name: "carl2", created_at: nil, updated_at: nil>
>> person.valid?
=> true
>> person.errors.size
=> 0

8 Displaying Validation Errors in the View
8.1 error_messages and error_messages_for
<%= form_for(@product) do |f| %>
  <%= f.error_messages %>
<% end %>

<%= error_messages_for :product %>

<%= f.error_messages :header_message => "Invalid product!",
                                 :message => "You'll need to fix the following fields:",
                                 :header_tag => :h3 %>

8.2 Customizing the Error Messages CSS
8.3 Customizing the Error Messages HTML

9 Callbacks Overview
9.1 Callback Registration
class User < ActiveRecord::Base
   validates_presence_of :login, :email

   before_validation :ensure_login_has_a_value

   protected
   def ensure_login_has_a_value
     if login.nil?
      self.login = email unless email.blank?
     end
   end
end

10 Available Callbacks
10.1 Creating an Object
before_validation
after_validation
before_save
after_save
before_create
around_create
after_create

10.2 Updating an Object
before_validation
after_validation
before_save
after_save
before_update
around_update
after_update

10.3 Destroying an Object
before_destroy
after_destroy
around_destroy

10.4 after_initialize and after_find
after_initialize
new a object, first initial an object.

after_find
first load the object from the database.

class User < ActiveRecord::Base
   def after_initialize
     puts "you have initialized an object!"
   end

   def after_find
     puts "you have found an object!"
   end
end

>>User.new
You have initialized an object!
>>User.first
You have found an object!
You have initialized an object!

11 Running Callbacks
12 Skipping Callbacks
13 Halting Execution
14 Relational Callbacks
class User < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end

class Post < ActiveRecord::Base
   after_destroy :log_destroy_action

   def log_destroy_action
     puts 'Post destroyed'
   end
end

>> user = User.first
>> user.posts.create!
>> user.destroy
Post destroyed

15 Conditional Callbacks
16 Callback Classes
17 Observers
17.1 Creating Observers
>rails generate observer Person

And there is a new file created from   app/models/person_observer.rb
class PersonObserver < ActiveRecord::Observer
  def after_create(model)
    puts "Code to send confirmation email..."
  end
end

17.2 Registering Observers
we need to register the observer in
config/application.rb
config.active_record.observers = :user_observer

17.3 Sharing Observers
We can observe more than one model
class MailerOberver < ActiveRecord::Observer
   observe :registration, :user
  
   def after_create(model)
      puts "send email"
   end
end

config.active_record.observers = :mail_observer

references:
http://guides.rubyonrails.org/active_record_validations_callbacks.html

分享到:
评论

相关推荐

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    You should have some experience with basic Rails concepts and a cursory understanding of JavaScript, CSS, and SQL, but by no means need to be an expert. You'll learn how to install Postgres on your ...

    Ruby on Rails_ Up and Running

    RUBY的经典之作,对其在RAILS下开发写得很详细

    ruby.on.rails.up.and.running

    《Ruby on Rails Up and Running》是一本专注于介绍Ruby on Rails框架的书籍,旨在帮助开发者快速上手并深入了解这个强大的Web开发平台。Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称,而Rails是基于...

    Ajax on Rails

    Testing lessons show you how to eliminate cross-browser JavaScript errors and DOM debugging nightmares using a combination of Firebug, and Venkman. Advanced material explains the most current design ...

    Rails3 device and cancan

    标题《Rails3 device and cancan》与描述《ROR ruby on rails device plugin教程》指出本文是关于如何在Rails 3.2应用程序中整合Devise认证插件和Cancan授权插件的教程。Devise是一个流行的Ruby on Rails的认证解决...

    jquery-validation-rails, 对 Rails 资产管道的jQuery验证.zip

    jquery-validation-rails, 对 Rails 资产管道的jQuery验证 :: 验证:: rails针对 Rails 资产管道的验证 。安装这里 gem将以下行添加到项目的Gemfile 中:gem 'jquery-validation-rails'在你的终端中运行以下命令:cd...

    [Rails] Crafting Rails Applications (英文版)

    This pioneering book is the first resource that deep dives into the new Rails 3 APIs and shows you how use them to write better web applications and make your day-to-day work with Rails more ...

    Agile Web Development with Rails 4

    You concentrate on creating the application, and Rails takes care of the details., Tens of thousands of developers have used this award-winning book to learn Rails. It’s a broad, far-reaching ...

    The Rails3 Way, 2nd Edition

    Ruby on Rails strips complexity from the development process, enabling professional developers to focus on what matters most: delivering business value via clean and maintainable code. The Rails™ 3 ...

    Ruby on Rails: Up and Running

    《Ruby on Rails: Up and Running》是一本针对初学者和有经验开发者的技术书籍,它深入浅出地介绍了如何使用Ruby on Rails框架构建Web应用程序。Ruby on Rails(简称Rails)是基于Ruby编程语言的一个开源Web应用框架...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Rails, Angular, Postgres, and Bootstrap(2nd) epub

    Rails, Angular, Postgres, and Bootstrap(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    unity插件 Tracks and Rails.unitypackage 铁路轨道生成

    这个扩展允许您创建任何自定义形状的轨道,然后将一个购物车附加到它,并实际骑在轨道上。让平台在受到撞击时能滑动,地铁列车撞到障碍物,坏掉的电梯,过山车,看不见的飞行路线,火箭推进的火车等等!...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

Global site tag (gtag.js) - Google Analytics