我认为包括ActiveModel
允许您以与ActiveRecord
相同的方式处理对象,而不会将其持久保存到数据库中。我知道ActiveModel::Model
允许您进行验证等,但不仅仅包括ActiveModel
也可以这样做吗?
答案 0 :(得分: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::Naming
,ActiveModel::Validations
等。这些方法会将方法混合到您的班级中。另请参阅ActiveModel::Model
的{{3}}。