我已经将以下内容粘贴到我的用户模型中:
module ClassMethods
Devise::Models.config(self, :email_regexp, :password_length)
end
我想在我的用户模型中执行类似self.extend ClassMethods
之类的操作,但我似乎无法正确使用它。我想在我的用户模型中直接访问设计中的这些方法。
答案 0 :(得分:0)
您是否尝试过:
require 'my_module'
include MyModule::ClassMethods
答案 1 :(得分:0)
您需要使用ActiveSupport::Concern
。在应该用于扩展您插入的类的模块中:
module ModuleName
extend ActiveSupport::Concern
....
....
....
module ClassMethods
# the Class Methos you want to add to other Classes here
end
module InstanceMethods
# the instance Methods you want to add to other classes here
end
end
然后,你需要做的只是include
你希望扩展的Model
!
class User < ActiveRecord::Base
include ModuleName
end
多数民众赞成。有关更多信息,请查看apidock =&gt; ::的ActiveSupport关注!
答案 2 :(得分:0)
我不确定我是否把一切都搞定了但如果你想在包含模块时为课程添加功能,你可以使用self.included
module ClassMethods
def self.included( base )
Devise::Models.config( base, :email_regexp, :password_length )
end
end
答案 3 :(得分:0)
我能想到的最佳方式是:
module Devisable
def included(base)
base.class_eval do
Devise::Models.config(self, :email_regexp, :password_length)
end
end
end
class_eval是一种插入代码的好方法,可以防止您使用base
或ClassMethods
。