原创作者: hideto
阅读:892次
评论:0条
更新时间:2011-05-26
续上式。
我们可以将Task类里的due_at_string这个虚拟属性的生成做成一个plugin:
这将在vendor/plugins目录生成如下文件:
我们来修改如下文件:
init.rb:
stringify_time.rb:
OK,我们可以来在Task类中使用我们刚才创建的插件了:
我们可以将Task类里的due_at_string这个虚拟属性的生成做成一个plugin:
ruby script/generate plugin stringify_time
这将在vendor/plugins目录生成如下文件:
vendor plugins stringify_time ---init.rb ---install.rb lib ----stringify_time.rb ---Rakefile ---README tasks test ---uninstall.rb
我们来修改如下文件:
init.rb:
require 'stringify_time' class ActiveRecord::Base extend StringifyTime end
stringify_time.rb:
module StringifyTime def stringify_time(*names) names.each do |name| define_method "#{name}_string" do read_attribute(name).to_s(:db) end define_method "#{name}_string=" do |time_str| begin write_attribute(name, Time.parse(time_str)) rescue ArgumentError instance_variable_set("@#{name}_invalid", true) end end define_method "#{name}_invalid?" do instance_variable_get("@#{name}_invalid") end end end end
OK,我们可以来在Task类中使用我们刚才创建的插件了:
class Task < ActiveRecord::Base stringify_time :due_at def validate errors.add(:due_at, "is invalid") if due_at_invalid? end end
评论 共 0 条 请登录后发表评论