From: Stefano Crocco Date: 2009-01-25T17:12:48+09:00 Subject: Re: Scope resolution operator Alle domenica 25 gennaio 2009, Daniel Waite ha scritto: > (The code I will demonstrate is Rails-based, but the question is > Ruby-based.) > > I'm familiar with the following: > ActiveRecord::Base > > Basically says, look inside ActiveRecord for a class or module named > Base. > > But what about the following: > ::Attachment > Does that basically say, no matter what scope you are in, jump to the > highest level to look for the class or module named Attachment? According to "The Ruby Programming Language", ::Something is a shortcut for Object::Something. The idea is that ::Something should look up a constant called Something in the global scope, but since ruby doesn't truly have a global scope, it looks it up in the Object class, which is the nearest thing in ruby to a global scope. > The following code only works when I prefix the Attachment class with :: > > has_one :attachment, :as => :attachable, :class_name => '::Attachment' > > def assign_attachment=(attachment_id) > self.attachment = ::Attachment.find(attachment_id) > end Not knowing rails, I can't say much on this. However, if it works with ::Attachment and doesn't work with Attachment, the only thing I can think of is that you have two constants called Attachment: one at global level, which is the one you need here, and another at a more local level which is the one you get without the :: I hope this helps Stefano