Ruby on rails 在Rails 4中包含ActiveModel和ActiveModel::Model有什么区别?
我认为包含Ruby on rails 在Rails 4中包含ActiveModel和ActiveModel::Model有什么区别?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我认为包含ActiveModel将允许您以与ActiveRecord相同的方式处理对象,而无需将其持久化到数据库中。我知道,ActiveModel::Model允许您执行验证等操作,但不只是包括ActiveModel也可以这样做?不,这不一样。包含ActiveModel不会为您提供验证方法。ActiveModel::Model提供的方法之一是persistend?,默认情况下返回false。您可以通过Rails控制台中的测试来验证这一点: class Test; include ActiveMo
ActiveModel
将允许您以与ActiveRecord
相同的方式处理对象,而无需将其持久化到数据库中。我知道,ActiveModel::Model
允许您执行验证等操作,但不只是包括ActiveModel
也可以这样做?不,这不一样。包含ActiveModel
不会为您提供验证方法。ActiveModel::Model
提供的方法之一是persistend?
,默认情况下返回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::Model
时,将调用included
方法,其中包括ActiveModel::Naming
、ActiveModel::Validations
等。这些方法会将方法混合到类中。另请参见有关ActiveModel::Model
的信息,谢谢您的帮助。接下来的一个问题是:什么时候只包含ActiveModel才有意义?我想不出任何场景,因为它的主要目的只是为加载设置一些引用。
def self.included(base)
base.class_eval do
extend ActiveModel::Naming
extend ActiveModel::Translation
include ActiveModel::Validations
include ActiveModel::Conversion
end
end