Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 元编程ActiveRecordRails_Ruby On Rails_Ruby_Metaprogramming - Fatal编程技术网

Ruby on rails 元编程ActiveRecordRails

Ruby on rails 元编程ActiveRecordRails,ruby-on-rails,ruby,metaprogramming,Ruby On Rails,Ruby,Metaprogramming,我的项目的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

我的项目的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_坐标”


提前谢谢

在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
试试这个:

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

但它不…:(即使我在意大利面食.rb中出现语法错误,我也不会收到它…Rails是否包含该文件?除非您告诉它。您可能必须
在某个地方要求“意大利面食”
。同样的事情…PS。我正在使用Rails 2.3.50。我已经解决了问题…谢谢!