我有我已經貼到我的用戶模型如下:如何使用模塊在Rails中擴展類?
module ClassMethods
Devise::Models.config(self, :email_regexp, :password_length)
end
我想要做這樣的事情在我的用戶模型self.extend ClassMethods
,但我不能完全似乎得到它的權利。我想從設計中直接在我的用戶模型中訪問這些方法。
我有我已經貼到我的用戶模型如下:如何使用模塊在Rails中擴展類?
module ClassMethods
Devise::Models.config(self, :email_regexp, :password_length)
end
我想要做這樣的事情在我的用戶模型self.extend ClassMethods
,但我不能完全似乎得到它的權利。我想從設計中直接在我的用戶模型中訪問這些方法。
您需要使用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
然後EHT只有你需要做的事情是include
它要延長Model
!
class User < ActiveRecord::Base
include ModuleName
end
那就是它。欲瞭解更多信息,請看apidock => ActiveSupport :: Concern!
你有沒有嘗試過:
require 'my_module'
include MyModule::ClassMethods
我不知道,如果我得到的一切權利,但如果你想添加功能,當模塊包含的類,你可以使用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
混淆。
我不這樣說得很對;你是對的,指出這些都是寶石,但我認爲這將擴展包含其中的父類,而不是我所在的類。 – cjm2671 2011-12-14 12:22:07