ubuntu, ror, jQuery, css, website memo
太嫩, 沒啥心得, 用來紀錄每天學的
顯示具有
module
標籤的文章。
顯示所有文章
顯示具有
module
標籤的文章。
顯示所有文章
2008年11月19日 星期三
module,class_eval,extend
http://giantrobots.thoughtbot.com/2008/6/2/slides-from-railsconf
http://www.ruby-doc.org/core/classes/Object.html#M000337
class Book < ActiveRecord::Base
include TestModule
want_lala :lake # 為啥要這樣, 用method 去生其他的method
end
module TestModule
def self.included(klass)
#===== 1 ===== 三種方法都可以
klass.extend ClassMethods
#===== 1 =====
#==== 2 =====
class << klass
def want_lala(name)
puts "#{name} lalala"
end
end
#===== 2 =====
#===== 3 =====
klass.class_eval do
def klass.want_lala(name)
puts "#{name} lalala"
end
end
#===== 3 =====
end
module ClassMethods
def want_lala(name)
puts "#{name} lalala"
end
end
end
module,extend,composed_of,advanced-activerecord
http://giantrobots.thoughtbot.com/2008/6/2/slides-from-railsconf
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html#M001663
http://www.ruby-doc.org/core/classes/Object.html#M000337
有類似的class method, validates, 就把他弄進module 裡
class User < ActiveRecord::Base
has_address :shipping
has_address :billing #傳參數進去 生成其他的method
has_many :orders
end
module Addressable
class << self #include 需要是class method
def included(base)
base.extend ClassMethods #extend 進來的method, 是上面User的class methods
end
end
module ClassMethods
def has_address(name)
name << “_” unless name.blank?
validates_presence_of "#{name}address_one", "#{name}city",
"#{name}state_province", "#{name}postal_code", "#{name}country"
validates_format_of "#{name}postal_code", :with => /\d{5}(-\d{4})?/,
:if => Proc.new { |user| user["#{name}country"] == "US" }
validates_format_of "#{name}postal_code", :with => /[a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d/,
:if => Proc.new { |user| user["#{name}country"] == "CA" }
composed_of "#{name}address", :class_name => “Address
:mapping => [ ["#{name}address_one", "address_one"],
["#{name}address_two", "address_two"],
["#{name}city", "city"],
["#{name}state_province", "state_province"],
["#{name}postal_code", "postal_code"]
["#{name}country", "country"] ]
end
end
end
ActiveRecord::Base.send :include, Addressable
較舊的文章
首頁
訂閱:
文章 (Atom)