Method: ActiveRecord::Migration#add_foreign_key

Defined in:
lib/pg_trunk/operations/foreign_keys/add_foreign_key.rb

#add_foreign_key(table, reference, **options) {|k| ... } ⇒ void

This method returns an undefined value.

Create a foreign key constraint

The table and reference of the new key must be set explicitly. All the rest (including the name) can be generated by default:

# same as `..., column: 'role_id', primary_key: 'id'`
add_foreign_key :users, :roles

The block syntax can be used for any argument:

add_foreign_key do |k|
  k.table "users"
  k.reference "roles"
  k.column "role_id" # (generated by default from reference and pk)
  k.primary_key "id" # (default)
  k.on_update :cascade # :restrict (default)
  k.on_delete :cascade # :restrict (default)
  k.name "user_roles_fk" # can be generated
  k.comment "Phone is 10+ chars long"
end

Composite foreign keys are supported as well:

add_foreign_key "users", "roles" do |k|
  k.columns %w[role_name role_id]
  k.primary_key %w[name id] # Requires unique index
  k.match :full # :partial, :simple (default)
end

The operation is always invertible.

Parameters:

  • table (#to_s)

    (nil) The qualified name of the table

  • reference (#to_s)

    (nil) The qualified name of the reference table

  • options (Hash)

    a customizable set of options

Options Hash (**options):

  • :name (#to_s) — default: nil

    The current name of the foreign key

  • :to (#to_s) — default: nil

    The new name for the foreign key

  • :columns (Array<#to_s>) — default: []

    The list of columns of the table

  • :column (#to_s) — default: nil

    An alias for :columns for the case of single-column keys

  • :primary_key (Array<#to_s>) — default: []

    The list of columns of the reference table

  • :match (Symbol) — default: :full

    Define how to match rows Supported values: :full (default), :partial, :simple

  • :on_delete (Symbol) — default: :restrict

    Define how to handle the deletion of the referred row. Supported values: :restrict (default), :cascade, :nullify, :reset

  • :on_update (Symbol) — default: :restrict

    Define how to handle the update of the referred row. Supported values: :restrict (default), :cascade, :nullify, :reset

Yields:

  • (k)

    the block with the key's definition

Yield Parameters:

  • Object

    receiver of methods specifying the foreign key



57
# File 'lib/pg_trunk/operations/foreign_keys/add_foreign_key.rb', line 57

def add_foreign_key(table, reference, **options, &block); end