Ruby on rails 比较ActiveRecord::Base和ActiveRecord

Ruby on rails 比较ActiveRecord::Base和ActiveRecord,ruby-on-rails,Ruby On Rails,ActiveRecord::Base和ActiveRecord之间的区别是什么 为什么我们必须扩展ActiveRecord::Base而不是ActiveRecord class User < ActiveRecord::Base def self.authenticate_unsafely(user_name, password) where("user_name = '#{user_name}' AND password = '#{password}'").first e

ActiveRecord::Base和ActiveRecord之间的区别是什么

为什么我们必须扩展ActiveRecord::Base而不是ActiveRecord

class User < ActiveRecord::Base
  def self.authenticate_unsafely(user_name, password)
    where("user_name = '#{user_name}' AND password = '#{password}'").first
  end

  def self.authenticate_safely(user_name, password)
    where("user_name = ? AND password = ?", user_name, password).first
  end

  def self.authenticate_safely_simply(user_name, password)
    where(user_name: user_name, password: password).first
  end
end
class用户

有一个很好的惯例,当你创建一个gem时,你不会创建很多顶级常量。相反,您应该创建一个单独的模块,其作用类似于gem的名称空间。这正是ActiveRecord模块的功能所在


ActiveRecord::Base是ActiveRecord的许多组件之一,其他组件包括
Schema
SchemaDumper
Relation
ImmutableRelation
验证
作用域
等类。您可以使用
ActiveRecord::Base
查看整个列表。如果ActiveRecord的创建者将所有这些常量都放在主名称空间中,那么在没有冲突的情况下,您可以为常量指定的名称将受到很大限制,因此需要包装模块。此模块还可以包含一些额外的元数据,因此您可以随时使用
ActiveRecord检查gem的当前版本。version

ActiveRecord
是一个,而
ActiveRecord::Base
是一个