Метапрограммирование ActiveRecord Rails - PullRequest
0 голосов
/ 17 июня 2010

У меня есть следующий код в каталоге lib моего проекта

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 - который я могу "назначить" для моделей ...Но я получаю сообщение об ошибке неопределенной локальной переменной или метода has_coordinates

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 17 июня 2010

Удаление self. в ClassMethods должно помочь.

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 голосов
/ 17 июня 2010

Попробуйте:

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
...