2010-06-16 46 views
0

我在project`s下面的代碼lib目錄元編程的ActiveRecord的Rails

module Pasta 
    module ClassMethods 
    def self.has_coordinates 
     self.send :include, InstanceMethods  
    end 
    end 

    module InstanceMethods 
    def coordinates 
     [longitude ||= 43.0, latitude ||= 25.0] 
    end 
    end 

    ActiveRecord::Base.extend ClassMethods 
end 

它應該創造的ActiveRecord :: Base的一個類的方法 - has_coordinates - 我能「分配」到模型.. 。但我收到錯誤undefined局部變量或方法'has_coordinates'

在此先感謝!

回答

0

試試這個:

module Pasta 
    def has_coordinates 
    send :include, InstanceMethods 
    end 

    module InstanceMethods 
    def coordinates 
     [longitude ||= 43.0, latitude ||= 25.0] 
    end  
    end 
end 

ActiveRecord::Base.extend Pasta 
+0

同樣的事...... PS。I我正在使用Rails 2.3.5 – 2010-06-17 08:41:23

+0

0.o我修理了一些東西......謝謝! – 2010-06-17 16:05:44

1

在ClassMethods中刪除self.應該可以做到。

module Pasta 
    module ClassMethods 
    def has_coordinates 
     self.send :include, InstanceMethods 
    end 
    end 

    module InstanceMethods 
    def coordinates 
     [longitude ||= 43.0, latitude ||= 25.0] 
    end 
    end 

    ActiveRecord::Base.extend ClassMethods 
end
+0

但它不... :( 即便我犯了語法錯誤pasta.rb,我不接收它... Rails包括該文件嗎? – 2010-06-17 07:47:30

+0

除非你告訴它,否則你可能需要require 'pasta' elektronaut 2010-06-17 09:39:53