2008-12-01 1 views

Répondre

8

:: Base est une classe dans le module ActiveRecord. Une des choses que font les modules est de fournir un espace de noms dans Ruby. Dans Ruby, vous n'héritez pas d'un module mais vous pouvez le mélanger en utilisant l'instruction include. Puis-je suggérer de prendre le livre Pickaxe ou de lire Why's (Poignant) Guide to Ruby.

+0

Mike, merci, je vraiment besoin de ramasser la pioche, calembour intentionné ;-) – Valentin

+0

de rien. bonne chance! –

6

dans Ruby, :: accède à la classe statique ou aux constantes de module. ActiveRecord::Base indique que la classe ou le module ActiveRecord a une classe interne statique appelée Base que vous étendez.

Edit: comme le souligne Mike, dans ce cas ActiveRecord est un module ...

+0

ActiveRecord est défini comme un module dans Rails, http://github.com/rails/rails/tree/master/activerecord/lib/active_record/base.rb –

4

:: est un opérateur unaire qui vous permet d'accéder à une constante, un module ou une classe définie dans une autre classe ou un autre module. Il est utilisé pour fournir des espaces de noms afin que les noms de méthodes et de classes ne soient pas en conflit avec d'autres classes d'auteurs différents.

Quand vous voyez ActiveRecord :: Base en Rails cela signifie que dans Rails ActiveRecord::Base est quelque chose comme ça

module ActiveRecord 
    class Base 
    end 
end 

Cela signifie qu'une classe appelé Base est à l'intérieur d'un module ActiveRecord qui est ensuite référencé comme ActiveRecord::Base

Pour une meilleure compréhension de l'opérateur ::, juste passer par cet exemple de tutorialspoint.com:

MR_COUNT = 0  # constant defined on main Object class 
module Foo 
    MR_COUNT = 0 
    ::MR_COUNT = 1 # set global count to 1 
    MR_COUNT = 2  # set local count to 2 
end 
puts MR_COUNT  # this is the global constant 
puts Foo::MR_COUNT # this is the local "Foo" constant