Add class variable to all models using concern to extend AR?

Hi All,

I’ve previously used concerns to extend my models without problems. I’m
now trying to extend all my models in one swell-foop by extending AR
with a concern. In brief, I want to add a class variable to each
individual model using a concern that extends AR. Specifically - I
need to find the where (and how) to define a class variable scoped to a
specific model in my AR extending concern. Is this sane? Possible?

Thanks,

Matt

On Nov 20, 2013, at 9:34 AM, Matt Y. [email protected] wrote:

Matt

Maybe? This seems like requiring the children to know a specific
implementation detail of a parent class via the concern mixin. Instead,
Id provide accessor methods.

On Wednesday, 20 November 2013 12:34:37 UTC-5, Ruby-Forum.com User
wrote:

You don’t want a class variable for this - they are shared between all
the
subclasses. A sample IRB trace:

irb: class Foo

end

===> nil
irb: module Bar

def wat=(value)
  @@wat = value
end

def wat
  @@wat
  end

end
===> nil
irb: Foo.send(:include, Bar)
===> Foo
irb: f = Foo.new
===> #Foo:0x00000100b5a008
irb: f.wat = ‘huh’
===> “huh”
irb: f.wat
===> “huh”
irb: class Baz < Foo
end
===> nil
irb: class Baz2 < Foo
end
===> nil
irb: b = Baz.new
===> #Baz:0x00000100b7ac68
irb: b.wat
===> “huh”
irb: b2 = Baz2.new
===> #Baz2:0x00000100b82580
irb: b2.wat = ‘nope’
===> “nope”
irb: f.wat
===> “nope”

You likely want a class instance variable instead, to avoid the sharing.
More details here:

http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/

–Matt J.

Thanks Matt,

Your observations are exactly what I was running into. Good to know I
should focus on class instance variables. Inheritance is a bit of mixed
bag- I want it for all subclasses of my models whose superclass is not
AR::Base.

The link is very helpful, wish I would have seen it earlier. A couple
followups- can you comment on whether some of the approach therein has
been replaced with the use of ‘class_attribute’? Also, do you forsee
any issues with using a Concern rather than the extend approach
described there?

At present I’ve fallen back to just extending individual models (this in
retrospect might be safer in the long run, albeit not as magikal).

Thanks again for your help,
Matt