📖 Scenario: You are building a simple Rails web app that shows a list of books. The data about books is stored in the controller, but you want to display it nicely on a web page.
🎯 Goal: Learn how views in Rails present data passed from the controller to show it on a web page.
📋 What You'll Learn
Create a list of books data in the controller
Set a variable in the controller to hold the books
Use the view template to loop through the books and display their titles
Add a heading in the view to label the list
💡 Why This Matters
🌍 Real World
Web apps often separate data logic (controller) from display logic (view) to keep code clean and manageable.
💼 Career
Understanding how views present data is essential for building user interfaces in Rails web development jobs.
Progress0 / 4 steps
1
DATA SETUP: Create a list of books in the controller
In the BooksController, create a variable called @books and set it to an array with these exact strings: 'The Hobbit', '1984', 'Brave New World'.
Ruby on Rails
Hint
Use @books = [ ... ] inside the index method.
2
CONFIGURATION: Prepare the view template
Create a file called index.html.erb in the app/views/books/ folder. Inside it, add a heading with <h1>Book List</h1>.
Ruby on Rails
Hint
Use an <h1> tag with the text 'Book List'.
3
CORE LOGIC: Display the books in the view
In index.html.erb, below the heading, add a <ul> list. Use <% @books.each do |book| %> to loop through @books. Inside the loop, add <li><%= book %></li>. Close the loop with <% end %>.
Ruby on Rails
Hint
Use ERB tags to loop and display each book inside <li> tags.
4
COMPLETION: Confirm the view renders the book list
Ensure the BooksController#index action renders the index.html.erb view that shows the heading and the list of books.
Ruby on Rails
Hint
Make sure the controller and view code are present together to show the data.
Practice
(1/5)
1. Why do views in Rails present data to users?
easy
A. To store data in the database
B. To turn raw data into readable web pages
C. To handle user login and authentication
D. To manage server configuration settings
Solution
Step 1: Understand the role of views in MVC
Views are responsible for showing data to users in a readable format, usually as HTML pages.
Step 2: Differentiate views from other parts
Controllers prepare data, models handle data storage, but views present data clearly to users.
Final Answer:
To turn raw data into readable web pages -> Option B
Quick Check:
Views present data = To turn raw data into readable web pages [OK]
Hint: Views display data as pages, not store or process it [OK]
Common Mistakes:
Confusing views with controllers or models
Thinking views handle data storage
Assuming views manage server settings
2. Which of the following is the correct way to insert Ruby data into a Rails view using ERB syntax?
easy
A. <% @user.name %>
B. [[ @user.name ]]
C. {{ @user.name }}
D. <%= @user.name %>
Solution
Step 1: Identify ERB syntax for output
In Rails views, <%= %> outputs Ruby code result into HTML.
Step 2: Compare options
<% %> runs Ruby code but does not output it; {{ }} and [[ ]] are not Rails ERB syntax.
Final Answer:
<%= @user.name %> -> Option D
Quick Check:
ERB output tag = <%= @user.name %> [OK]
Hint: Use <%= %> to show Ruby data in views [OK]
Common Mistakes:
Using <% %> which does not output data
Confusing with other template syntaxes like {{ }}
Forgetting to use equals sign for output
3. Given the controller sets @items = ['apple', 'banana', 'cherry'], what will this view code output?
<ul>
<% @items.each do |item| %>
<li><%= item.upcase %></li>
<% end %>
</ul>
medium
A.
APPLE
BANANA
CHERRY
B.
apple
banana
cherry
C.
Item
Item
Item
D. Syntax error due to missing output tag
Solution
Step 1: Understand the loop and method
The code loops over @items and outputs each item in uppercase inside <li> tags.
Step 2: Check output tags and method
<%= item.upcase %> outputs the uppercase string; the loop is correct.
Final Answer:
<ul><li>APPLE</li><li>BANANA</li><li>CHERRY</li></ul> -> Option A
Quick Check:
Loop with upcase output =
APPLE
BANANA
CHERRY
[OK]
Hint: Look for <%= %> to output transformed data inside loop [OK]
Common Mistakes:
Confusing <% %> with <%= %> causing no output
Ignoring the upcase method effect
Assuming original lowercase output
4. Identify the error in this Rails view snippet:
<ul>
<% @products.each do |product| %>
<li><%= product.name %></li>
<% end %>
</ul>
medium
A. No error, code is correct
B. Using <%= inside <% block without closing properly
C. Incorrect ERB output tag syntax
D. Missing closing tag for <li>
Solution
Step 1: Inspect ERB tags inside the loop
The code uses proper ERB syntax: <% %> for the loop, <%= product.name %> for output, and HTML tags correctly placed.
Step 2: Verify no syntax issues
All tags are properly opened and closed; no mixing of ERB and HTML incorrectly.
Final Answer:
No error, code is correct -> Option A
Quick Check:
Valid Rails ERB view code = No error, code is correct [OK]
Hint: Ensure ERB tags <%= %> wrap only Ruby code, not HTML [OK]
Common Mistakes:
Placing HTML closing bracket inside ERB tag
Confusing <% and <%= tags
Assuming no syntax error when mixing tags
5. You want to display a list of users with their email only if the email is present. Which view code correctly presents this conditional data?
<ul>
<% @users.each do |user| %>
<li>
<%= user.name %>
<% if user.email.present? %>
(<%= user.email %>)
<% end %>
</li>
<% end %>
</ul>
hard
A. Syntax error due to missing output tags
B. Always shows email even if empty
C. Correctly shows name and email only if email exists
D. Does not loop through users properly
Solution
Step 1: Analyze the loop and conditional
The code loops over @users and shows user.name always.
Step 2: Check conditional email display
The if condition checks if email is present, then outputs it inside parentheses.
Step 3: Verify ERB syntax correctness
Output tags <%= %> are used properly for name and email; control flow tags <% %> for condition.
Final Answer:
Correctly shows name and email only if email exists -> Option C
Quick Check:
Conditional display with correct ERB = Correctly shows name and email only if email exists [OK]
Hint: Use <% if %> for conditions, <%= %> to output data [OK]
Common Mistakes:
Using <%= for if without closing properly
Outputting email without checking presence
Forgetting to close loop or condition tags
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.