环境:ruby1.8.6、rails2.3.4
可能标题没表达清楚,就是说看到别人的笔记中看到说 activerecord 在 执行save 的时候底层是先执行了 validation 的,晚上看了下 base.rb 和 validations.rb 源码,才明白是用了alias_method_chain ,具体在 validations.rb 文件第370-378行和第76-82行,第77行执行了 valid? ,再看 valid? ,是执行了 validate 和 validate_on_create/validate_on_update
具体 alias_method_chain 是干嘛的,请看下面这两篇文章
alias,alias_method和alias_method_chainhttp://hooney.javaeye.com/blog/550156
rails魔术字段的实现 ,alias_method_chain用法,for classmethodhttp://hooney.javaeye.com/blog/210244
那么我们就用 alias_method_chain 来模拟 save 前调用 validation
require 'rubygems'
require 'activesupport'
class Myclass
def save
puts 'save...'
end
def validation
puts 'validation...'
end
def save_with_validation
validation #exec validation
save_without_validation #exec save
end
alias_method_chain :save, :validation
end
c=Myclass.new
c.save
可能标题没表达清楚,就是说看到别人的笔记中看到说 activerecord 在 执行save 的时候底层是先执行了 validation 的,晚上看了下 base.rb 和 validations.rb 源码,才明白是用了alias_method_chain ,具体在 validations.rb 文件第370-378行和第76-82行,第77行执行了 valid? ,再看 valid? ,是执行了 validate 和 validate_on_create/validate_on_update
具体 alias_method_chain 是干嘛的,请看下面这两篇文章
Quotation
alias,alias_method和alias_method_chainhttp://hooney.javaeye.com/blog/550156
rails魔术字段的实现 ,alias_method_chain用法,for classmethodhttp://hooney.javaeye.com/blog/210244
那么我们就用 alias_method_chain 来模拟 save 前调用 validation
require 'rubygems'
require 'activesupport'
class Myclass
def save
puts 'save...'
end
def validation
puts 'validation...'
end
def save_with_validation
validation #exec validation
save_without_validation #exec save
end
alias_method_chain :save, :validation
end
c=Myclass.new
c.save
网友评论(0):


