A standard Rails controller receives an incoming HTTP request, generates the data needed for the response, and renders an HTML view template.
By convention, the Rails view templates are stored under the app/views
directory, in the folders named after the controllers. The name of the folder is the snake_cased version of the controller name, after stripping the string Controller
from it. There's a view file named after each action.
For example, the views for the PostsController
controller are stored under the app/views/posts
directory. If this controller has two actions named show
and index
, there will be two view templates:
app/views/posts/show.html.erb
app/views/posts/index.html.erb
Rails automatically figures out which view template to render based on the action name. That is, if you do not explicitly render something at the end of a controller action, Rails will automatically look for the action_name.html.erb
template in the controller's view directory and render it.
In those rare cases where you want to render a different view, you can use the render
helper method as follows:
class PostsController < ApplicationController
def index
@posts = Post.all
render "articles/index"
end
end
In this example, Rails will render the app/views/articles/index.html.erb
view template, instead of the app/views/posts/index.html.erb
template.
render
in various ways. You can render the default view for a Rails template, or a specific template (like we just did), or a file, or inline code, or nothing at all. You can also render text, JSON, or XML. Finally, you can specify the content type or HTTP status of the rendered response as well. We'll learn about them all in future posts in this series, so stay tuned.That's a wrap. I hope you found this article helpful and you learned something new.
As always, if you have any questions or feedback, didn't understand something, or found a mistake, please leave a comment below or send me an email. I reply to all emails I get from developers, and I look forward to hearing from you.
If you'd like to receive future articles directly in your email, please subscribe to my blog. Your email is respected, never shared, rented, sold or spammed. If you're already a subscriber, thank you.