accessing model class variables in a controller.

Hi --

Hello,

In my model Example, I've defined three types as such:

class Example < ActiveRecord::Base @@TYPE_A = 'A' @@TYPE_B = 'B' @@TYPE_C = 'C'

def Example.select.... end end

How can I access these types in my controller. I'm trying the following with my controller named Read:

def exm a = Example.TYPE_A end

It won't allow me to declare the types and gives me a syntax error. Any help would be appreciated. Aren't these just class variable declarations and should be available through the class?

You're confusing class variables with constants, and constants with methods :slight_smile:

Class variables (@@var) are variables with a scope that includes

   1. the class in whose scope they were created    2. all descendants of that class    3. all instances of any of those classes

What class variables *don't* have is any implication for methods; that is, when you assign to a class variable, you're just assigning to a variable, not creating any methods that either get or set the value of that variable.

If you want such methods, you have to write them:

   class C      def self.cvar_x # access the cvar from the class        @@x      end

     def cvar_x # access it from instances of the class        @@x      end    end

or create/use a facility for doing so, like the "cattr_*" methods that are used internally in Rails.

By the way, the somewhat strange behavior of "class variables" -- in particular, that they're not actually class-specific, but are more class-hierarchy-specific -- is due to change in future versions of Ruby. Then there are people like me, who think class variables cause (and will continue to cause, even with that change) much more trouble than they're worth, and wish they would go away entirely. But I don't think Matz is in that camp :slight_smile:

David