如何使用模块在Rails中扩展类?
我已经将以下内容粘贴到我的用户模型中:
module ClassMethods Devise::Models.config(self, :email_regexp, :password_length) end
我想在我的用户模型中执行类似self.extend ClassMethods
的操作,但我似乎无法正确使用它。 我想在我的用户模型中直接从devise访问这些方法。
您需要使用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
它include
在你想扩展的Model
!
class User < ActiveRecord::Base include ModuleName end
而已。 有关更多信息,请查看apidock => ActiveSupport ::关注!
你有没有尝试过:
require 'my_module' include MyModule::ClassMethods
我不确定我是否把所有东西都self.included
但是如果你想在包含模块的时候为课程添加function,你可以使用self.included
module ClassMethods def self.included( base ) Devise::Models.config( base, :email_regexp, :password_length ) end end
我能想到的最好的方法是:
module Devisable def included(base) base.class_eval do Devise::Models.config(self, :email_regexp, :password_length) end end end
class_eval是一种插入代码并防止您使用base
或ClassMethods
的好方法。