Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 4中包含ActiveModel和ActiveModel::Model有什么区别?_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

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