Bird
Raised Fist0
Ruby on Railsframework~20 mins

Adding and removing columns in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Rails Migration Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
📝 Syntax
intermediate
2:00remaining
Correct syntax for adding a column in Rails migration
Which option correctly adds a new column named age of type integer to the users table in a Rails migration?
Ruby on Rails
class AddAgeToUsers < ActiveRecord::Migration[7.0]
  def change
    # Add column here
  end
end
Aadd_column :users, :age, :integer
Badd_column :age, :users, :integer
Cadd_column :users, :age, integer
Dadd_column users, :age, :integer
Attempts:
2 left
💡 Hint
Remember the order: table name, column name, then type, all symbols except type must be symbols.
❓ component_behavior
intermediate
2:00remaining
Effect of removing a column in Rails migration
After running this migration, what will happen to the email column in the customers table?
Ruby on Rails
class RemoveEmailFromCustomers < ActiveRecord::Migration[7.0]
  def change
    remove_column :customers, :email, :string
  end
end
AThe <code>email</code> column will be set to NULL but not removed.
BThe <code>email</code> column will be renamed to <code>string</code>.
CThe migration will fail because <code>remove_column</code> does not accept a type argument.
DThe <code>email</code> column will be deleted from the <code>customers</code> table.
Attempts:
2 left
💡 Hint
Think about what remove_column does in Rails migrations.
🔧 Debug
advanced
2:00remaining
Identify the error in this migration removing a column
What error will this migration raise when run?
Ruby on Rails
class RemoveStatusFromOrders < ActiveRecord::Migration[7.0]
  def change
    remove_column :orders, :status
  end
end
ANo error, migration runs successfully and removes the column.
BRuntimeError because remove_column requires a block.
CSyntaxError due to missing colon before :status.
DArgumentError because the column type is missing in remove_column call.
Attempts:
2 left
💡 Hint
Check the Rails documentation for remove_column method signature.
❓ state_output
advanced
2:00remaining
State of the database after adding and removing columns
Given these two migrations run in order, what columns will the products table have?
Ruby on Rails
class AddDescriptionToProducts < ActiveRecord::Migration[7.0]
  def change
    add_column :products, :description, :text
  end
end

class RemovePriceFromProducts < ActiveRecord::Migration[7.0]
  def change
    remove_column :products, :price, :decimal
  end
end
AThe <code>products</code> table will have neither <code>description</code> nor <code>price</code> columns.
BThe <code>products</code> table will have both <code>description</code> and <code>price</code> columns.
CThe <code>products</code> table will have the <code>description</code> column added and the <code>price</code> column removed.
DThe migrations will fail because you cannot add and remove columns in separate migrations.
Attempts:
2 left
💡 Hint
Think about what each migration does and that migrations run in order.
🧠 Conceptual
expert
3:00remaining
Understanding reversible migrations with add_column and remove_column
Which statement best describes how Rails handles the change method when using add_column and remove_column in a migration?
ARails can reverse both <code>add_column</code> and <code>remove_column</code> automatically without any extra code.
BRails automatically knows how to reverse <code>add_column</code> by removing the column, but cannot reverse <code>remove_column</code> without extra information.
CRails cannot reverse either <code>add_column</code> or <code>remove_column</code> automatically; you must write separate <code>up</code> and <code>down</code> methods.
DRails reverses <code>remove_column</code> by adding the column back with default values, but cannot reverse <code>add_column</code>.
Attempts:
2 left
💡 Hint
Think about what information Rails needs to reverse a migration.

Practice

(1/5)
1. What is the primary purpose of adding a column in a Rails migration?
easy
A. To rename an existing table
B. To delete old data from the database
C. To create a new database table
D. To store new types of data in an existing database table

Solution

  1. Step 1: Understand what adding a column means

    Adding a column means extending an existing table to hold more data fields.
  2. Step 2: Identify the purpose of adding columns in Rails migrations

    It allows storing new types of data without creating a new table or deleting data.
  3. Final Answer:

    To store new types of data in an existing database table -> Option D
  4. Quick Check:

    Adding columns = storing new data [OK]
Hint: Adding columns means expanding tables to hold new data [OK]
Common Mistakes:
  • Confusing adding columns with creating tables
  • Thinking adding columns deletes data
  • Mixing up adding columns with renaming tables
2. Which of the following is the correct syntax to add a column named age of type integer to the users table in a Rails migration?
easy
A. add_column :users, :age, :integer
B. add_column users, age, integer
C. add_column(:users, :age, integer)
D. add_column(:users, age, :integer)

Solution

  1. Step 1: Recall the correct method signature for adding a column

    The method is add_column(table_name, column_name, type) with symbols for names.
  2. Step 2: Check each option for correct syntax

    add_column :users, :age, :integer uses symbols and correct commas: add_column :users, :age, :integer.
  3. Final Answer:

    add_column :users, :age, :integer -> Option A
  4. Quick Check:

    Correct syntax uses symbols and commas [OK]
Hint: Use symbols and commas: add_column :table, :column, :type [OK]
Common Mistakes:
  • Omitting colons before symbols
  • Using parentheses incorrectly
  • Missing commas between arguments
3. Given this migration code:
class AddNicknameToUsers < ActiveRecord::Migration[7.0]
  def change
    add_column :users, :nickname, :string
  end
end

What will happen after running rails db:migrate?
medium
A. An error will occur because the migration is missing a remove_column
B. The users table will be deleted
C. A new column 'nickname' of type string will be added to the users table
D. The nickname column will be removed from the users table

Solution

  1. Step 1: Understand the migration code

    The migration adds a string column called nickname to the users table inside the change method.
  2. Step 2: Know what rails db:migrate does

    It applies the change method, adding the new column to the database table.
  3. Final Answer:

    A new column 'nickname' of type string will be added to the users table -> Option C
  4. Quick Check:

    add_column in change adds the column [OK]
Hint: add_column inside change adds the column on migrate [OK]
Common Mistakes:
  • Thinking remove_column is required to add columns
  • Confusing add_column with deleting tables
  • Assuming migration deletes columns by default
4. You wrote this migration to remove the birthdate column from users:
class RemoveBirthdateFromUsers < ActiveRecord::Migration[7.0]
  def change
    remove_column :users, :birthdate
  end
end

When running rails db:migrate, you get an error. What is the likely cause?
medium
A. remove_column requires the column type as a third argument in change method
B. remove_column cannot be used inside change method
C. The migration class name is incorrect
D. You must use add_column to remove a column

Solution

  1. Step 1: Recall remove_column syntax in change method

    When using remove_column inside change, you must provide the column type as the third argument.
  2. Step 2: Check the migration code

    The code misses the column type, causing an error during migration.
  3. Final Answer:

    remove_column requires the column type as a third argument in change method -> Option A
  4. Quick Check:

    remove_column in change needs column type [OK]
Hint: Provide column type when removing columns in change method [OK]
Common Mistakes:
  • Omitting column type argument
  • Trying to remove columns with add_column
  • Misnaming migration class
5. You want to add a status column to orders with default value 'pending' and then remove the old_status column safely. Which migration code correctly does this?
hard
A. def change add_column :orders, :status, :string remove_column :orders, :old_status end
B. def change add_column :orders, :status, :string, default: 'pending' remove_column :orders, :old_status, :string end
C. def change add_column :orders, :status, :string, default: 'pending' remove_column :orders, :old_status end
D. def up add_column :orders, :status, :string, default: 'pending' remove_column :orders, :old_status, :string end def down remove_column :orders, :status add_column :orders, :old_status, :string end

Solution

  1. Step 1: Understand adding with default and removing columns safely

    Adding a column with default works in change. Removing a column in change requires the type for reversibility.
  2. Step 2: Analyze options for correctness and safety

    def change add_column :orders, :status, :string, default: 'pending' remove_column :orders, :old_status, :string end uses def change add_column :orders, :status, :string, default: 'pending' remove_column :orders, :old_status, :string end with default on add and type on remove for safe migration and rollback.
  3. Final Answer:

    def change add_column :orders, :status, :string, default: 'pending' remove_column :orders, :old_status, :string end -> Option B
  4. Quick Check:

    change method with type for remove and default for add [OK]
Hint: Use change with column type for safe remove_column [OK]
Common Mistakes:
  • Omitting column type when removing
  • Not providing default value when needed
  • Using change method without rollback safety
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