# Determining Action in the Controller

**URL:** <https://www.ruby-forum.com/t/determining-action-in-the-controller/109382>\
**Category:** Rails\
**Created:** [July 13, 2007, 10:27pm UTC](https://www.ruby-forum.com/t/determining-action-in-the-controller/109382 "2007-07-13T22:27:46Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jwm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c37758/32.png) [@jwm](https://www.ruby-forum.com/u/jwm)\
**Post date:** [July 13, 2007, 10:27pm UTC](https://www.ruby-forum.com/t/determining-action-in-the-controller/109382/1 "2007-07-13T22:27:46Z")

</div>

Hi,

I am trying to select a layout for a page based on what action is  
called.  
ex.

if controller.action\_name == ‘about’  
layout “internal”  
else  
layout “home\_static”  
end

But I am receiving this error:

undefined local variable or method `controller’ for HomeController:Class

Is there any way that I can do this? Is this even possible?

Thanks,

Jonathon

---

<div class="post-metadata">

**Author:** ![jwm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c37758/32.png) [@jwm](https://www.ruby-forum.com/u/jwm)\
**Post date:** [July 13, 2007, 11:05pm UTC](https://www.ruby-forum.com/t/determining-action-in-the-controller/109382/2 "2007-07-13T23:05:51Z")

</div>

Hmm, not sure if this will work, but since the controller is the  
object and the “actions” are just methods then:

if self.respond\_to?(about)  
layout “internal”  
else  
layout “home\_static”  
end

On Jul 13, 4:27 pm, “Jonathon Paul M.”

---

<div class="post-metadata">

**Author:** ![jwm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c37758/32.png) [@jwm](https://www.ruby-forum.com/u/jwm)\
**Post date:** [July 14, 2007, 3:19am UTC](https://www.ruby-forum.com/t/determining-action-in-the-controller/109382/3 "2007-07-14T03:19:08Z")

</div>

On 7/13/07, Jonathon Paul M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hi,
> 
> I am trying to select a layout for a page based on what action is called.  
> ex.
> 
> if controller.action\_name == ‘about’  
> layout “internal”  
> else  
> layout “home\_static”  
> end

I’m not sure whether layout can be called conditionally this way, but  
I _am_ sure that “controller” is an instance variable, not a local  
variable. Try something like:

```
if @controller.action_name == 'about'
  layout "internal"
else
  layout "home_static"
end

```

Craig

---

<div class="post-metadata">

**Author:** ![jwm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c37758/32.png) [@jwm](https://www.ruby-forum.com/u/jwm)\
**Post date:** [July 16, 2007, 8:40pm UTC](https://www.ruby-forum.com/t/determining-action-in-the-controller/109382/4 "2007-07-16T20:40:55Z")

</div>

Found out the answer.

layout :choose\_layout

private  
def choose\_layout  
if [‘signup’, ‘login’].include? action\_name  
‘login’  
else  
‘admin’  
end  
end

This works perfectly.  
From here:  
[http://paulsturgess.co.uk/articles/show/41-how-to-specify-multiple-layouts-within-the-same-controller-in-ruby-on-rails](http://paulsturgess.co.uk/articles/show/41-how-to-specify-multiple-layouts-within-the-same-controller-in-ruby-on-rails)

---

<div class="post-metadata">

**Author:** ![jwm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c37758/32.png) [@jwm](https://www.ruby-forum.com/u/jwm)\
**Post date:** [July 14, 2007, 4:49am UTC](https://www.ruby-forum.com/t/determining-action-in-the-controller/109382/5 "2007-07-14T04:49:19Z")

</div>

On Jul 13, 1:27 pm, “Jonathon Paul M.”  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> But I am receiving this error:
> 
> undefined local variable or method `controller’ for HomeController:Class
> 
> Is there any way that I can do this? Is this even possible?
> 
> Thanks,
> 
> Jonathon

Hmm, interesting question, you could look at how Radiant or Typo or  
other apps do themes, e.g.

[http://mattmccray.com/svn/rails/plugins/theme\_support/](http://mattmccray.com/svn/rails/plugins/theme_support/)  
[http://ragnarson.blogspot.com/2006/04/dynamic-templateroot-revisited.html](http://ragnarson.blogspot.com/2006/04/dynamic-templateroot-revisited.html)  
[http://ragnarson.blogspot.com/2006/03/dynamic-templateroot.html](http://ragnarson.blogspot.com/2006/03/dynamic-templateroot.html)

[http://ostracons.com/entry/259/full-plates](http://ostracons.com/entry/259/full-plates)
