Class variables in an inheritance hierarchy

T

Todd Breiholz

------=_Part_13289_32734560.1137773209543
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

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 o=
f
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

------=_Part_13289_32734560.1137773209543--
 
D

dblack

Hi --

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.

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
(e-mail address removed)

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
 
E

Eero Saynatkari

Todd said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,777
Messages
2,569,604
Members
45,233
Latest member
AlyssaCrai

Latest Threads

Top