# Class variables in templates/layouts

**URL:** <https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288>\
**Category:** Rails\
**Created:** [July 6, 2006, 4:40am UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288 "2006-07-06T04:40:26Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 4:40am UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/1 "2006-07-06T04:40:26Z")

</div>

I’m having problems with class variables… I have a class:

class Content::ApplicantsController \< ApplicationController  
layout “mylayout”  
@@tab = “mystring”  
[… the rest is standard scaffold-created stuff …]

and a layout (mylayout.rhtml):

[…]

\<%= @@tab.capitalize %\> [...]

And I keep getting this error:

uninitialized class variable @@tab in  
ActionView::Base::CompiledTemplates

I’ve searched the net and come up dry. Ruby docs say I’m supposed to  
initialize class variables before I can use them but I’d assume that the  
`= "mystring"` would count as initializing it…

---

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 7:52am UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/2 "2006-07-06T07:52:52Z")

</div>

i think it is deep in the language, that you actually have to initialize  
it via the initialize(arg/args) definition, although i am not definately  
sure…

what about if you do this inside the class -

def initialize(str)  
@str = str  
end

@@tab = Classinstancevar.new(“mystring”)

will this work?

---

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 3:19pm UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/3 "2006-07-06T15:19:54Z")

</div>

Gabriel wrote:

> […]  
> I’ve searched the net and come up dry. Ruby docs say I’m supposed to  
> initialize class variables before I can use them but I’d assume that the  
> `= "mystring"` would count as initializing it…

I think rails only copies instance variables from the controller objects  
to the view objects.

–  
Jack C.  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 9:42pm UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/4 "2006-07-06T21:42:54Z")

</div>

shai wrote:

> what about if you do this inside the class -  
> def initialize(str)  
> @str = str  
> end  
> @@tab = Classinstancevar.new(“mystring”)  
> will this work?

I’m not sure… I don’t think I get the chance to initialize a  
Controller manually…

Jack C. wrote:

> I think rails only copies instance variables from the controller objects  
> to the view objects.

Hm… What’s the best way to get a variable to the view for all actions  
if you can’t do it with a class variable?

---

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 9:57pm UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/5 "2006-07-06T21:57:48Z")

</div>

* * *

Rails mailing list  
removed\_email\_address@domain.invalid  
[http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)

---

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 10:01pm UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/6 "2006-07-06T22:01:11Z")

</div>

Hi –

On Thu, 6 Jul 2006, removed\_email\_address@domain.invalid wrote:

> Controller manually…
> 
> Jack C. wrote:
> 
> > I think rails only copies instance variables from the controller objects  
> > to the view objects.
> 
> Hm… What’s the best way to get a variable to the view for all actions  
> if you can’t do it with a class variable?

Put it in an instance variable that you initialize in a before\_filter  
in application.rb.

David

–  
“To fully realize the potential of Rails, it’s crucial that you take  
the time to fully understand Ruby–and with “Ruby for Rails” David  
has provided just what you need to help you achieve that goal.”  
– DAVID HEINEMEIER HANSSON, in the foreword to RUBY FOR RAILS.  
Complete foreword & sample chapters at [Ruby for Rails](http://www.manning.com/black)!

---

<div class="post-metadata">

**Author:** ![gabriel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/9de0a6/32.png) [@gabriel](https://www.ruby-forum.com/u/gabriel)\
**Post date:** [July 6, 2006, 11:15pm UTC](https://www.ruby-forum.com/t/class-variables-in-templates-layouts/97288/7 "2006-07-06T23:15:10Z")

</div>

> Put it in an instance variable that you initialize in a before\_filter  
> in application.rb.

Yeah I just came to that conclusion… I’d rather have a class variable.  
😉
