Adding foreign key to a rails model

The currently accepted answer on this isn’t really accurate as it doesn’t add a database foreign key. It’s just adding integer columns.

In Rails 4.2.x, the current approach is:

http://guides.rubyonrails.org/active_record_migrations.html#foreign-keys

Create a migration:

rails generate migration migration_name

For existing columns, in the migration add the foreign keys like this:

class MigrationName < ActiveRecord::Migration
  def change
    add_foreign_key :business_hours, :businesses
    add_foreign_key :businesses, :users
  end
end

For Rails 4.x or if you’re adding a new column and want it to be a foreign key you can do this, where you probably also want to specify the index as true, but that’s not part of the requirement for the foreign key:

http://edgeguides.rubyonrails.org/active_record_migrations.html#creating-a-migration

class MigrationName < ActiveRecord::Migration
  def change
    add_reference :business_hours, :business, index: true, foreign_key: true
    add_reference :businesses, :user, index: true, foreign_key: true
  end
end

Leave a Comment