Rails开发细节(三)Participating in the Monitoring Process

Participating in the Monitoring Process

参与监控过程

ActiveRecord控制着model对象 的生命周期,它创建它们,在修改,保存和更新的时候监控它们,并且在删除的时候也进行监控。使用回调函 数,ActiveRecord允许我们的代码参与这个监控过程。

ActiveRecord总共定义了20个回调函数。18个 成对的before和after,还有两个例外:after_find和after_initialize。

开发细节(三)Participating in the Monitoring Process-participating">

实现callback有两种方式。

第一种,直接在对象的回调方法中写代码。

class Order 

< ActiveRecord::Base
  def after_save
    self.payment_due ||= Time.now + 30.days
  end
end

第二种,为回调声明一个处理器,处理器可以是一个方法,或者是一个block。

class Order < ActiveRecord::Base
  before_validation :normalize_credit_card_number 

  after_create do |order|
    logger.info "Order #{order.id} created"
  end 

  protected
  def normalize_credit_card_number
    self.cc_number.gsub!(/[-\s]/, '')
  end
end

你可以为一个回调函数指定多个处理程序,多个处理程序会按照指定的顺序执行,除非其中一个处理程序 返回false,这时候才会终止后面的处理程序。

因为需要优化性能,定义after_find和 after_initialize只能用方法的方式,如果使用其他方式,定义的处理程序会被忽略。

Grouping Related Callbacks Together

callback分组

可以将相关的callback处理方法定义在单独的类中 ,这样这些处理方法就可以在多个model中共享。一个处理类就是在一个类中定义回调方法,把这些类放在 app/models文件夹中。

class CreditCardCallbacks
  def before_validation(model)
    model.cc_number.gsub!(/[-\s]/, '')
  end
end 

class Order < ActiveRecord::Base
  before_validation CreditCardCallbacks.new
end 

class Subscription < ActiveRecord::Base
  before_validation CreditCardCallbacks.new
end

上面的CreditCardCallbacks的before_validation就是共享的,这需要Order和Subscription都包含 cc_number属性。共享的处理程序,需要处理相同的属性,肯定需要共享处理程序的model有相同名称的属性。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索程序
, 方法
, activerecord
, end
, 处理
一个
participating、nonparticipating ffi、participating share、participating怎么读、participating loan,以便于您获取更多的相关知识。

时间: 2024-09-03 19:31:23

Rails开发细节(三)Participating in the Monitoring Process的相关文章

Rails开发细节(九)Rails的测试

1.为什么写测试 rails使得我们很容易就可以写测试.在创建model和controller的时候,rails帮助我们创建了测试的骨架代码. 通过简单的运行你的测试代码,你可以确保你的代码在重构之后任然满足需求的功能. rails测试可以模拟浏览器请求,这样你就可以在不适用浏览器的情况下测试应用的响应情况. 2.测试简介 因为每一个rails应用都会和数据库有大量的交互,因此你的测试也需要一个数据库来进行交互.为了更好的写测试,你需要知道如何建立数据库,以及加载样本数据. 2.1.三个环境 每

Rails开发细节(八)Rails应用的安全

看过本文之后,你应该熟悉下面的内容: 所有显著的对策. rails中session的概念,其中存放的内容,常见的攻击手段. rails中大量的分配问题. 在提供管理接口的时候,你不得不关注的一些事情. 如何管理用户:登陆,退出,在各个层面的攻击方法. 常见的注入攻击方法. 1.简介 web框架帮助开发者构建web应用.它们中的一些还可以帮助你构建安全的web应用.事实上一个框架并不比两一个框架安全,如果你正确的使用,你可以用很多框架构建安全的web应用.rails包含一些聪明的帮助工具,例如防止

Rails开发细节(五)Migrations 数据迁移

1.简介 在rails中用migration可以很方便的管理数据库的结构.可以创建数据库,创建表,删除表,添加字段,删除字段,整理数据. migration就是一系列的class,这些类都继承了ActiveRecord::Migration类. class CreateProducts < ActiveRecord::Migration def up create_table :products do |t| t.string :name t.column :description, :text

Rails开发细节(四)Transactions事务

事务在数据库应用开发中是相当重要的,尤其是在关系数据库中.典型的例子就是银行在转账,在两个账 户之间转账. account1.deposite(100) account2.withdraw(100) 在ActiveRecord中使用transaction方法执行一段block来实现事务.在 block的最后,会提交事务,更新数据库,如果在block中发生异常,数据库会回滚所有改变. Account.transaction do account1.deposite(100) account2.wi

Rails开发细节(二)CRUD

Create & Save 创建 & 保存 order = Order.new order.name = "virusswb" order.email = "asdf@exmaple.com" order.save 调用save方法之后就可以保存到数据库了. 还可以用block来创建并保存. Order.new do |order| order.name = "virusswb" order.email = "asdf@

Rails开发细节(一)

常用命令 rails new new_app cd new_app rake db:create rails server rails generate controller Blog action1 action2 rails generate scaffold Product title:string description:text rails generate model Comment commenter:string body:text post:references rake db

Rails开发细节(七)ActiveRecord Associations关联

1.为什么需要关联 很多时候,比如说电子商务中的用户和订单,一个用户会有很多的订单,一个订单只属于一个用户,这就是一种关联. 在创建订单的时候需要用户主键作为外键,删除用户的的同时需要删除用户的订单. 在rails中可以向下面这样订单关联. class Customer < ActiveRecord::Base has_many :orders, :dependent => :destroy end class Order < ActiveRecord::Base belongs_to

Rails开发细节(六)ActiveRecord Validationa and Callbacks验证和回调

1.对象生命周期 通常情况下,在rails应用中,对象会被创建,修改和删除.ActiveRecord针对这些对象提供了拦截,你可以控制你的应用和这些对象. 验证保证了存入数据库的数据都是有效的.回调和观察者允许你在对象状态发生变化的前后进行一些逻辑操作. 2.验证 2.1.为什么需要验证 验证保证了只有合法的数据才可以存入数据库.例如,你的应用需要确保每个用户都拥有合法的电子邮件地址和邮寄地址. 在存入数据库之前,有很多方法可以验证数据的合法性.包括数据库约束,客户端的验证,controller

Ruby on rails开发从头来(windows)(三十)- NetBeans IDE

到现在,应该告一段落了,总共有二十九篇随笔,干脆凑个整数,再写写IDE环境吧.前面所有的代码都是我用ruby自带的编辑器SciTE编写的,很不方便,随着Rails的发展,目前也有很多IDE推出来,刚刚看到NetBeans推出的6.0rc版,提供了单独的Rails开发环境,这次来简单尝试下. 1.第一步当然是下载NetBeans的6.0rc版,在http://sunmicro.vo.llnwd.net/c1/netbeans/6.0/final/下载. 2.下载后一路默认安装,完成后启动NetBe