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?



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


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, User

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

irb: class Foo


===> nil
irb: module Bar

def wat=(value)
  @@wat = value

def wat

===> nil
irb: Foo.send(:include, Bar)
===> Foo
irb: f =
===> #Foo:0x00000100b5a008
irb: f.wat = ‘huh’
===> “huh”
irb: f.wat
===> “huh”
irb: class Baz < Foo
===> nil
irb: class Baz2 < Foo
===> nil
irb: b =
===> #Baz:0x00000100b7ac68
irb: b.wat
===> “huh”
irb: b2 =
===> #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:

–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

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,