Conditional layout - show

Hello all, I'm learning Ruby on Rails and still kind of new at this.

I have two different layouts (standard page and dialog box) for a view (show).

It is inadvisable to use the word layout here as that word has a particular meaning in Rails. I take it that you mean that you have two different ways that you want to show the same data.

How do I set each layout in the controller to show the different layout?

Something like this...

- Controller - def show @project = Project.find(params[:id])

if 'view is page' render :layout => 'page_layout' else render :layout => 'dialog'

end

Where would I set the variable? in the show.html.erb?

What is not clear is how you know which view you want to show. Does the user do something to indicate which view he wants or is it something else? Is it possibly that you want a different view when just displaying the data from when the user is entering the data in the first place (or editting it)?

Colin

I apologize to all for being unclear. It's just the newbie coming out. Let's try again.

I have a 'projects' layout within the 'Views' folder, with a heading, nav bar, and content area. When you select "show" on the index.html.erb of the 'projects' View folder, the project information displays in the content area. I wish to not change this.

Within another template, I have a link that produces a dialog box (Prototype Window) that displays the project information. When the dialog box appears, the project information displays as the first layout, with header, nav bar and content area.

I created a layout for displaying just the content area and set it in the controller.

- controller - def show     @project = Project.find(params[:id])

     render :layout => 'dialog'

end

When I go back to the original index.html.erb and click on the 'show' link, my 'header/nav bar/content area layout disappears. All that displays is the project information without any styling.

I hope this clears up things.

JohnM

Colin Law wrote:

I apologize to all for being unclear. It's just the newbie coming out. Let's try again.

I have a 'projects' layout within the 'Views' folder, with a heading, nav bar, and content area.

Is that literally a layout, ie views/layouts/projects.html.erb?

When you select "show" on the index.html.erb of the 'projects' View folder, the project information displays in the content area. I wish to not change this.

So that is views/projects/show.html.erb using layouts/projects.html.erb as the layout?

Within another template, I have a link that produces a dialog box (Prototype Window) that displays the project information. When the dialog box appears, the project information displays as the first layout, with header, nav bar and content area.

Lost me I am afraid, what is a template? When you say you have a link that produces a dialog box is that a javascript box called up without going back to the server or what?

I created a layout for displaying just the content area and set it in the controller.

Is this the projects controller or another one? We have already decided that projects/show is working ok.

- controller - def show @project = Project.find(params[:id])

render :layout => 'dialog'

end

When I go back to the original index.html.erb and click on the 'show' link, my 'header/nav bar/content area layout disappears. All that displays is the project information without any styling.

It appears that you are saying that clicking on the same link (which presumably is just a get on the controller, nothing fancy, shows a different result in the browser? Odd to say the least. You have not shown us the code for projects_controller#show. Is there some logic in there that could make it do something different the second time? Have a look at the generated html (View, Page source or similar in browser) and see what the difference is. Have a look in development.log and see what is different there. That may give you a clue.

I hope this clears up things.

Not entirely. :slight_smile:

Colin