ruby-on-rails
2016-01-19 63 views -2 likes 
-2

ActiveRecord :: Base和ActiveRecord有什么区别?比较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 

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

+5

'ActiveRecord'是一个[模块](https://github.com/rails/rails/blob/master/activerecord/lib/active_record.rb) 'ActiveRecord :: Base'是一个[class] (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb) –

回答

1

有一个伟大的约定,当你创建一个宝石,你没有创造出很多顶级常量。相反,你应该创建一个单独的模块,它就像你的宝石命名空间一样。这正是ActiveRecord模块的功能。

的ActiveRecord :: Base是ActiveRecord的许多部件之一 - 包括其他类,如SchemaSchemaDumperRelationImmutableRelationValidationScoping和许多许多。您可以使用ActiveRecord::Base查看整个列表。如果ActiveRecord的创建者将所有这些常量放在主名称空间中,那么您可以在很大程度上限制可以在不冲突的情况下向常量提供的名称,因此需要包装模块。该模块还可以包含一些额外的元数据,因此无论何时您都可以使用ActiveRecord.version来检查当前版本的gem。

相关问题