# Using a different layout for just one action in controller

**URL:** <https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186>\
**Category:** Rails\
**Created:** [May 2, 2007, 7:38pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186 "2007-05-02T19:38:10Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 2, 2007, 7:38pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/1 "2007-05-02T19:38:10Z")

</div>

I have a controller where everything uses the same layout except for one  
action called view. I tried this at the top of the controller:

layout “remote”, :only =\> [:view]  
layout “standard”, :except =\> [:view]

This renders standard for :view, and the other actions don’t use a  
layout at all!

How can I get what I want here?

Thanks!

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 2, 2007, 7:51pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/2 "2007-05-02T19:51:57Z")

</div>

in your action:

render [render stuff], :layout =\> ‘layout\_name’

Jason

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 2, 2007, 8:00pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/3 "2007-05-02T20:00:39Z")

</div>

Jason R. wrote:

> in your action:
> 
> render [render stuff], :layout =\> ‘layout\_name’
> 
> Jason

I tried that, but my controller does checking on db stuff, and if it  
fails, I do a redirect\_to, then I get an error about render and  
redirect\_to in the same action.

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 2, 2007, 8:07pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/4 "2007-05-02T20:07:59Z")

</div>

In the controller:

layout :layout\_a, :except =\> :fred  
layout :layout\_b, :only =\> fred

Michael

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 2, 2007, 8:29pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/5 "2007-05-02T20:29:48Z")

</div>

MichaelLatta wrote:

> In the controller:
> 
> layout :layout\_a, :except =\> :fred  
> layout :layout\_b, :only =\> fred
> 
> Michael

I tried that too, and got the result I mentioned in my first post. I  
tried it without giving an array, as well.

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 3, 2007, 4:41am UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/6 "2007-05-03T04:41:44Z")

</div>

Ugly, but use the method version of layout:

layout :standard\_or\_remote  
def standard\_or\_remote(controller)  
if controller.action\_name == ‘view’  
‘remote’  
else  
‘standard’  
end  
end

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 3, 2007, 3:15pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/7 "2007-05-03T15:15:56Z")

</div>

> layout :standard\_or\_remote  
> def standard\_or\_remote(controller)  
> if controller.action\_name == ‘view’  
> ‘remote’  
> else  
> ‘standard’  
> end  
> end

I think that would work great. I decided yesterday to move the view  
action to a different controller that fit it better logically anyway.

Thanks everyone for your help!

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [June 18, 2007, 8:39pm UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/8 "2007-06-18T20:39:00Z")

</div>

Don’t forget:

def standard\_or\_remote(controller)  
controller.action\_name == ‘view’ ? ‘remote’ : ‘standard’  
end

---

<div class="post-metadata">

**Author:** ![jason](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/dc4da7/32.png) [@jason](https://www.ruby-forum.com/u/jason)\
**Post date:** [May 3, 2007, 6:50am UTC](https://www.ruby-forum.com/t/using-a-different-layout-for-just-one-action-in-controller/103186/9 "2007-05-03T06:50:52Z")

</div>

Jason wrote:

> 

You can always put the test in an if/else…

b
