Reputation: 4492
I know that by default, views in Rails use the template provided in application.html.erb
. However, there's one view that I wouldn't like to use the template provided in application.html.erb
, but rather write all the HTML in that view itself. Is that possible to do?
Upvotes: 6
Views: 3995
Reputation: 3710
You have to be sure that your controller inherits from ApplicationController
class MyCustomController < ApplicationController
Upvotes: 0
Reputation: 53018
You can achieve the same thing using custom layouts.
e.g. For WelcomeController
Create a custom layout file named welcome.html.erb
in app/views/layout/
.
Write your layout code there(don't forget the yield
). Due to rails Convention over Configuration
feature when rails renders any view mapped to WelcomeController
, welcome.html.erb
will override the default application.html.erb
layout.
If you want to name your custom layout file differently. Rails allows you to do that as well. Name your layout file as mylayout.html.erb
.
In WelcomeController
, add the following code
class WelcomeController < ApplicationController
layout 'mylayout'
....
end
If you want custom layout for only a specific action, then on the last line of action write render layout: 'mylayout'
Upvotes: 2
Reputation: 6736
Sure, in your action do something like this:
def action
render :layout => false
end
This assumes there are other actions in your controller which do need the layout. Otherwise, I would specify layout false
in the controller root.
If you have multiple actions which don't need a layout, I believe you can do
layout false, :only => [ :action1, :action2 ]
Upvotes: 2
Reputation: 12439
For a specific action:
class SomeController < ApplicationController
def my_custom_action
render layout: false
end
end
Upvotes: 4
Reputation: 3965
At the end of your controller action, add:
render :layout => false
Upvotes: 10