ruby-on-rails
2016-01-19 66 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。

相關問題