Bird
Raised Fist0
Ruby on Railsframework~5 mins

Custom validation methods in Ruby on Rails - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a custom validation method in Rails?
A custom validation method is a user-defined method inside a Rails model that checks if an object meets specific rules beyond built-in validations. It helps ensure data is correct before saving.
Click to reveal answer
beginner
How do you tell Rails to use a custom validation method?
You use the validate :method_name syntax inside the model. Rails then calls that method during validation.
Click to reveal answer
beginner
What should a custom validation method do if the data is invalid?
It should add an error message to the model's errors collection using errors.add(:attribute, "message"). This prevents saving and shows the problem.
Click to reveal answer
intermediate
Why use custom validation methods instead of built-in validators?
Custom validations let you check complex or unique rules that built-in validators can't handle, like comparing two fields or checking external conditions.
Click to reveal answer
beginner
Example: How to write a custom validation method that ensures a user's age is at least 18?
Inside the User model, define a method like:
def adult_age
  errors.add(:age, "must be at least 18") if age && age < 18
end
validate :adult_age
Click to reveal answer
Which keyword tells Rails to run a custom validation method?
Avalidates_with
Bvalidates
Cvalidate
Dvalidate_with
Where do you add error messages inside a custom validation method?
Aadd_error(:attribute, "message")
Berrors.add(:attribute, "message")
Cerror.add(:attribute, "message")
Dadd.errors(:attribute, "message")
What happens if a custom validation adds an error to the model?
AThe model deletes itself
BThe model saves anyway
CThe error is ignored
DThe model will not save
Which of these is a reason to use a custom validation?
ATo check a rule built-in validators can't handle
BTo speed up saving records
CTo automatically fix errors
DTo skip validations
How do you call a custom validation method named check_name?
Avalidate :check_name
Bvalidates :check_name
Cvalidate_with :check_name
Dvalidates_with :check_name
Explain how to create and use a custom validation method in a Rails model.
Think about where to put the method and how Rails knows to run it.
You got /3 concepts.
    Describe why and when you would choose a custom validation method over built-in validators.
    Consider what built-in validators can't do.
    You got /3 concepts.

      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