Bird
Raised Fist0
Ruby on Railsframework~30 mins

Error messages and display in Ruby on Rails - Mini Project: Build & Apply

Choose your learning style10 modes available
Error messages and display
📖 Scenario: You are building a simple Rails web app where users can submit a form to create a new article. You want to show error messages clearly if the user submits invalid data.
🎯 Goal: Create a Rails form for a new Article that shows error messages above the form fields when validation fails.
📋 What You'll Learn
Create an Article model with validations
Add a controller action to handle new article creation
Display error messages in the form view when validations fail
Use Rails helpers to show errors in a user-friendly way
💡 Why This Matters
🌍 Real World
Showing clear error messages in forms is essential for good user experience in web apps. It helps users fix mistakes and submit correct data.
💼 Career
Understanding Rails validations, controller logic, and error display is a core skill for Rails developers building user-friendly web applications.
Progress0 / 4 steps
1
Create the Article model with validations
Create a Rails model called Article with a title attribute that must be present (not blank). Write the validation inside the model file.
Ruby on Rails
Hint

Use validates :title, presence: true inside the model class.

2
Add the ArticlesController with new and create actions
Create an ArticlesController with new and create actions. In new, initialize @article = Article.new. In create, build @article = Article.new(article_params) and save it. If save fails, render :new again.
Ruby on Rails
Hint

Remember to permit :title in article_params.

3
Create the form view with error messages display
In the new.html.erb view, create a form for @article using form_with. Above the form fields, add code to display error messages if @article.errors.any?. Show a heading and list each error message inside an unordered list.
Ruby on Rails
Hint

Use form_with model: @article, local: true and check @article.errors.any? to show errors.

4
Add flash notice display and final touches
In the application layout or above the form in new.html.erb, add code to display the flash notice if present. Use flash[:notice] inside a div with id notice. This will show success messages after article creation.
Ruby on Rails
Hint

Use if flash[:notice] and show it inside a div with id notice.

Practice

(1/5)
1. In Rails, which method provides a list of user-friendly error messages for a model's validation errors?
easy
A. @model.errors.count
B. @model.errors.details
C. @model.errors.keys
D. @model.errors.full_messages

Solution

  1. Step 1: Understand error message methods

    @model.errors.full_messages returns an array of readable error strings, while others return metadata or counts.
  2. Step 2: Identify user-friendly output

    Only full_messages gives clear, complete error messages suitable for display.
  3. Final Answer:

    @model.errors.full_messages -> Option D
  4. Quick Check:

    Error messages = full_messages [OK]
Hint: Use full_messages for readable error text [OK]
Common Mistakes:
  • Using errors.details which gives error codes, not messages
  • Using errors.keys which lists fields, not messages
  • Using errors.count which returns number, not messages
2. Which of the following is the correct way to display error messages for a @user model in a Rails view?
easy
A. <%= @user.errors.full_messages.each do |msg| %>

<%= msg %>

<% end %>
B. <% @user.errors.full_messages.each do |msg| %>

<%= msg %>

<% end %>
C. <%= @user.errors.full_messages.map { |msg| content_tag(:p, msg) } %>
D. <% @user.errors.full_messages.map { |msg| content_tag(:p, msg) } %>

Solution

  1. Step 1: Understand ERB tags for iteration

    <% %> runs Ruby code without output; <%= %> outputs the result. For loops, use <% %>.
  2. Step 2: Identify correct syntax for displaying messages

    <% @user.errors.full_messages.each do |msg| %>

    <%= msg %>

    <% end %>
    correctly uses <% %> to loop and <%= %> inside to output each message.
  3. Final Answer:

    Option B -> Option B
  4. Quick Check:

    Loop with <% %>, output with <%= %> [OK]
Hint: Use <% %> for loops, <%= %> for output inside loops [OK]
Common Mistakes:
  • Using <%= %> for loops causing unwanted output
  • Using map without outputting results
  • Mixing output and code tags incorrectly
3. Given this Rails code in a view:
<ul>
  <% @post.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
</ul>

What will be the output if @post.errors.full_messages contains ["Title can't be blank", "Content is too short"]?
medium
A.
  • Title can't be blank
  • Content is too short
B.
    Title can't be blankContent is too short
C.
  • Title can't be blank
  • Content is too short
  • D. No output because of syntax error

    Solution

    1. Step 1: Understand the loop output

      The code loops over each error message and wraps it in
    2. tags inside a <ul>.
    3. Step 2: Match output to HTML structure

      The output will be a <ul> list with two
    4. items showing each error message.
    5. Final Answer:

      <ul><li>Title can't be blank</li><li>Content is too short</li></ul> -> Option A
    6. Quick Check:

      Loop creates list items inside ul [OK]
    Hint: Errors inside <li> tags within <ul> show as list [OK]
    Common Mistakes:
    • Forgetting <ul> tags causing invalid HTML
    • Not using <li> tags for each message
    • Confusing output with plain text
    4. You wrote this code to display errors:
    <%= @article.errors.full_messages.each do |msg| %>
      <p><%= msg %></p>
    <% end %>

    But no errors show up in the browser. What is the problem?
    medium
    A. The <code><p>s
    B. You must call to_s on each message before displaying
    C. Using <code><%= %>s
    D. The errors array is empty, so nothing shows

    Solution

    1. Step 1: Check ERB tag usage for loops

      Using <%= %>each, which is the original array, not the loop content.
    2. Step 2: Correct loop tag usage

      Use <% %> for loops to run code without output, then use <%= %> inside for each message.
    3. Final Answer:

      Using <%= %> for the loop causes output of the array, not the messages -> Option C
    4. Quick Check:

      Use <% %> for loops, not <%= %> [OK]
    Hint: Use <% %> for loops, <%= %> for output inside loops [OK]
    Common Mistakes:
    • Using <%= %> for loops causing wrong output
    • Assuming errors are empty without checking
    • Misunderstanding HTML tag usage inside loops
    5. You want to display error messages only if there are any errors on the @comment model. Which is the best way to do this in a Rails view?
    hard
    A. <% if @comment.errors.any? %> <div role='alert' aria-live='assertive'> <ul> <% @comment.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %>
    B. <div> <ul> <% @comment.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div>
    C. <% if @comment.errors.count > 0 %> <p>Errors found</p> <% end %>
    D. <% unless @comment.errors.empty? %> <p>Please fix errors</p> <% end %>

    Solution

    1. Step 1: Check for errors presence

      Use errors.any? to check if there are any errors to display.
    2. Step 2: Display errors accessibly

      Wrap errors in a div with role='alert' and aria-live='assertive' for screen readers to announce changes.
    3. Step 3: Loop and show messages

      Use full_messages inside a ul with li for each error message.
    4. Final Answer:

      Option A -> Option A
    5. Quick Check:

      Check errors.any? and use accessible alert div [OK]
    Hint: Use errors.any? and role='alert' div for accessible errors [OK]
    Common Mistakes:
    • Not checking if errors exist before displaying
    • Missing accessibility roles for error containers
    • Displaying generic messages without details
    Recommended

    Ready to prove it?

    Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

    10 questions~5 mineasy hard