2014-05-01 72 views

回答

2

不,這是不一樣的。包括ActiveModel未向您提供驗證方法。 ActiveModel::Model給出的方法之一是persisted?,默認返回false。您可以在Rails的控制檯測試驗證這一點:

class Test; include ActiveModel; end; Test.new.persisted? 
# NoMethodError: undefined method `persisted?' for #<Test:0x007f84ddd6d620> 

class Test; include ActiveModel::Model; end; Test.new.persisted? 
# false 

ActiveModel模塊只定義自動加載的子模塊(check the source)提供一些參考。它實際上並沒有將任何方法混入你的課堂。

,另一方面ActiveModel::Model做一些事情,當你有它:

def self.included(base) 
    base.class_eval do 
    extend ActiveModel::Naming 
    extend ActiveModel::Translation 
    include ActiveModel::Validations 
    include ActiveModel::Conversion 
    end 
end 

當你包括ActiveModel::Model,該included方法被調用,其中包括ActiveModel::NamingActiveModel::Validations等。這些都混合方法到類。另請參閱sourceActiveModel::Model

+0

感謝您解決這個問題。一個後續問題:什麼時候它實際上只與ActiveModel相關? – Magne

+0

我想不出任何場景,因爲它的主要目的只是爲加載設置一些引用。 – fivedigit

相關問題