如何使用模块在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 

然后,你需要做的只是includeinclude在你想扩展的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是一种插入代码并防止您使用baseClassMethods的好方法。