Bird
Raised Fist0
Ruby on Railsframework~10 mins

Custom validation methods in Ruby on Rails - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a custom validation method in a Rails model.

Ruby on Rails
class User < ApplicationRecord
  validate :[1]

  def custom_age_check
    errors.add(:age, "must be at least 18") if age < 18
  end
end
Drag options to blanks, or click blank then click option'
Acheck_age
Bvalidate_age
Ccustom_age_check
Dage_check
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different method name in the validate call than the method defined.
Forgetting to define the custom validation method.
2fill in blank
medium

Complete the code to add an error message inside the custom validation method.

Ruby on Rails
def check_username
  if username.blank?
    errors.[1](:username, "can't be blank")
  end
end
Drag options to blanks, or click blank then click option'
Aappend
Badd_error
Cpush
Dadd
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'add_error' or other incorrect method names.
Forgetting to specify the attribute when adding errors.
3fill in blank
hard

Fix the error in the custom validation method to correctly check if email contains '@'.

Ruby on Rails
def email_format
  unless email.[1]('@')
    errors.add(:email, "must contain @")
  end
end
Drag options to blanks, or click blank then click option'
Ainclude?
Bcontains
Chas
Dincludes
Attempts:
3 left
💡 Hint
Common Mistakes
Using non-existent methods like 'contains' or 'has'.
Forgetting the question mark at the end of 'include?'.
4fill in blank
hard

Fill both blanks to create a custom validation that checks if password length is at least 6.

Ruby on Rails
def password_length_check
  if password.[1] < [2]
    errors.add(:password, "is too short")
  end
end
Drag options to blanks, or click blank then click option'
Alength
B6
Csize
D5
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'size' instead of 'length' (both work but only one is correct here).
Using the wrong number for minimum length.
5fill in blank
hard

Fill all three blanks to create a custom validation that adds an error if age is not between 18 and 65.

Ruby on Rails
def age_range_check
  unless age [1] 18 [2] age [3] 65
    errors.add(:age, "must be between 18 and 65")
  end
end
Drag options to blanks, or click blank then click option'
A>=
B<=
C&&
D||
Attempts:
3 left
💡 Hint
Common Mistakes
Using '||' instead of '&&' which allows invalid ages.
Reversing the comparison operators.

Practice

(1/5)
1. What is the main purpose of a custom validation method in a Rails model?
easy
A. To add your own rules for checking data before saving
B. To automatically generate database tables
C. To create user interface elements
D. To speed up database queries

Solution

  1. Step 1: Understand validation role in Rails

    Validations check data correctness before saving to the database.
  2. Step 2: Identify custom validation purpose

    Custom validations let you write your own rules beyond built-in checks.
  3. Final Answer:

    To add your own rules for checking data before saving -> Option A
  4. Quick Check:

    Custom validation = custom data rules [OK]
Hint: Custom validations add your own data rules [OK]
Common Mistakes:
  • Confusing validations with database setup
  • Thinking validations create UI elements
  • Assuming validations improve query speed
2. Which is the correct way to add a custom validation method named check_age in a Rails model?
easy
A. validates :check_age
B. validate :check_age
C. validate_check_age
D. validates_with :check_age

Solution

  1. Step 1: Recall syntax for custom validations

    Use validate :method_name to call a custom method.
  2. Step 2: Match method name with syntax

    For method check_age, syntax is validate :check_age.
  3. Final Answer:

    validate :check_age -> Option B
  4. Quick Check:

    Custom validation syntax = validate :method_name [OK]
Hint: Use 'validate :method_name' for custom validations [OK]
Common Mistakes:
  • Using 'validates' instead of 'validate' for custom methods
  • Adding underscores in method call
  • Using 'validates_with' incorrectly
3. Given this model code:
class User < ApplicationRecord
  validate :check_name

  def check_name
    errors.add(:name, "can't be blank") if name.blank?
  end
end

What happens if you try to save a User with name = ''?
medium
A. The save fails with an error on the name attribute
B. The save succeeds without errors
C. A syntax error occurs
D. The save fails but no error message is added

Solution

  1. Step 1: Understand the custom validation logic

    The method adds an error if name.blank? is true (empty string).
  2. Step 2: Effect on saving a User with empty name

    Since name is blank, error is added and save fails.
  3. Final Answer:

    The save fails with an error on the name attribute -> Option A
  4. Quick Check:

    Blank name triggers error = save fails [OK]
Hint: Blank fields trigger errors in custom validations [OK]
Common Mistakes:
  • Assuming save succeeds despite errors
  • Confusing blank? with nil check
  • Expecting syntax errors from valid code
4. Identify the error in this custom validation method:
class Product < ApplicationRecord
  validate :check_price

  def check_price
    errors.add(:price, "must be positive") if price <= 0
  end
end
medium
A. The method name should start with 'validate_'
B. The validation should use 'validates' instead of 'validate'
C. No error; the code is correct
D. The comparison operator should be '==' instead of '<='

Solution

  1. Step 1: Check method naming and usage

    Custom validation methods do not need 'validate_' prefix; 'validate :method' is correct.
  2. Step 2: Verify validation logic and syntax

    Using 'validate' with method and condition 'price <= 0' is valid Ruby and Rails syntax.
  3. Final Answer:

    No error; the code is correct -> Option C
  4. Quick Check:

    Custom validation syntax and logic are correct [OK]
Hint: Custom validation methods do not need special prefixes [OK]
Common Mistakes:
  • Adding 'validate_' prefix to method name
  • Using 'validates' for custom methods
  • Changing correct comparison operators
5. You want to create a custom validation that ensures a User's username is at least 5 characters and contains no spaces. Which code correctly implements this?
hard
A.
validate :username_rules

def username_rules
  errors.add(:username, "invalid") if username.length <= 5 && username.include?(" ")
end
B.
validates :username, length: { minimum: 5 }, format: { without: /\s/ }
C.
validate :username_rules

def username_rules
  errors.add(:username, "invalid") unless username.length >= 5 && !username.include:(" ")
end
D.
validate :username_rules

def username_rules
  if username.length < 5 || username.include?(" ")
    errors.add(:username, "must be 5+ chars and no spaces")
  end
end

Solution

  1. Step 1: Understand the validation requirements

    Username must be at least 5 characters and contain no spaces.
  2. Step 2: Analyze each option's logic

    validate :username_rules
    
    def username_rules
      if username.length < 5 || username.include?(" ")
        errors.add(:username, "must be 5+ chars and no spaces")
      end
    end
    uses OR logic to add error if username is shorter than 5 or contains spaces, which matches requirements.
  3. Step 3: Check other options

    validates :username, length: { minimum: 5 }, format: { without: /\s/ }
    uses built-in validations, not custom method.
    validate :username_rules
    
    def username_rules
      errors.add(:username, "invalid") unless username.length >= 5 && !username.include:(" ")
    end
    has syntax error with colon in method call.
    validate :username_rules
    
    def username_rules
      errors.add(:username, "invalid") if username.length <= 5 && username.include?(" ")
    end
    uses wrong comparison (<= 5 excludes 5).
  4. Final Answer:

    validate :username_rules def username_rules if username.length < 5 || username.include?(" ") errors.add(:username, "must be 5+ chars and no spaces") end end -> Option D
  5. Quick Check:

    Custom validation logic matches requirements [OK]
Hint: Check logic carefully: use OR for combined invalid conditions [OK]
Common Mistakes:
  • Using AND instead of OR for combined conditions
  • Confusing built-in validations with custom methods
  • Wrong comparison operators causing off-by-one errors
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