Bry*_*cke 3 ruby activerecord ruby-on-rails
如果我写这个,一切正常:
class A < ActiveRecord::Base
acts_as_taggable
end
Run Code Online (Sandbox Code Playgroud)
但是,如果我acts_as_taggable
把它放入A类包含的模块中,我会收到一个错误:
module B
def self.included(base)
base.class_eval do
extend ClassMethods
include InstanceMethods
end
end
module ClassMethods
acts_as_taggable
end
module InstanceMethods
end
end
class A < ActiveRecord::Base
include B
Run Code Online (Sandbox Code Playgroud)
上面代码中的错误是:
undefined local variable or method `acts_as_taggable' for C::ClassMethods:Module
Run Code Online (Sandbox Code Playgroud)
acts_as_taggable
从附带的模块打电话不正确吗?
它是否需要在类定义中?
当Ruby加载包含你的模块的文件B
并到达该acts_as_taggable
行时,它将尝试执行acts_as_taggable
类方法ClassMethods
(它不存在,因为它实际上是一个类方法ActiveRecord::Base
).
您可以使用该included
方法在acts_as_taggable
包含模块时调用.included
传递包含模块的类,因此以下内容将起作用:
module B
def self.included(base)
base.acts_as_taggable
# ...
end
# ...
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
137 次 |
最近记录: |