Forum: Ruby Class variables in an inheritance hierarchy

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8d50470327c9f59b275f532026b465ec?d=identicon&s=25 Todd Breiholz (Guest)
on 2006-01-20 17:44
(Received via mailing list)
Assume the following structure:

class Base
end

class Account < Base
end

class Opportunity < Base
end


I want to have a class variable Account.fields that is different than
Opportunity.fields, so that all instances of Account can reference the
Account.fields and all instances if Opportunity can reference
Opportunity.fields and get the correct results.

As a reference, I am trying to create something akin to ActiveRecord
(for a
different type of datasource) where each distinct object has it's own
set of
attributes. I've been looking at the ActiveRecord code, but being new to
Ruby it's giving me a bit of a headache :)

Thanks!

Todd Breiholz
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-01-20 20:18
(Received via mailing list)
Hi --

On Sat, 21 Jan 2006, Todd Breiholz wrote:

>
>
> I want to have a class variable Account.fields that is different than
> Opportunity.fields, so that all instances of Account can reference the
> Account.fields and all instances if Opportunity can reference
> Opportunity.fields and get the correct results.

Account.fields and Opportunity fields are methods, not variables.  You
can easily define them:

   class Account < Base
     def self.fields
       # code here, possibly using instance variable to hold info
     end
   # etc.
   end

Or you could put it in a module and extend the various classes with
it.  (The best exact way will depend on what's in the method.)

For the instances:

   class Base
     def fields
       self.class.fields
     end
   end

That way, each object will know to query its own class to get the
right fields method.


David

--
David A. Black
dblack@wobblini.net

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
Fe9b2d0628c0943af374b2fe5b320a82?d=identicon&s=25 Eero Saynatkari (rue)
on 2006-01-20 20:34
Todd Breiholz wrote:
> Assume the following structure:
>
> class Base
> end
>
> class Account < Base
> end
>
> class Opportunity < Base
> end
>
>
> I want to have a class variable Account.fields that is different than
> Opportunity.fields, so that all instances of Account can reference the
> Account.fields and all instances if Opportunity can reference
> Opportunity.fields and get the correct results.
>
> As a reference, I am trying to create something akin to ActiveRecord
> (for a
> different type of datasource) where each distinct object has it's own
> set of
> attributes. I've been looking at the ActiveRecord code, but being new to
> Ruby it's giving me a bit of a headache :)

You can use class instance variables (Classes Are Objects Too(tm) :)

  class Account < Base
    # We are in the context of the class so this variable
    # will belong to the class, not its instances.
    @fields = something
  end

You would also need to set up accessors for the variables.

> Thanks!
>
> Todd Breiholz


E
This topic is locked and can not be replied to.