Ruby on Rails latest stable (v7.1.3.2) - 1 note - Class: ActiveRecord::ConnectionAdapters::SchemaStatements
add_reference(table_name, ref_name, **options) public

Adds a reference. The reference column is a bigint by default, the :type option can be used to specify a different type. Optionally adds a _type column, if :polymorphic option is provided.

The options hash can include the following keys:


The reference column type. Defaults to :bigint.


Add an appropriate index. Defaults to true. See #add_index for usage of this option.


Add an appropriate foreign key constraint. Defaults to false, pass true to add. In case the join table can’t be inferred from the association pass :to_table with the appropriate table name.


Whether an additional _type column should be added. Defaults to false.


Whether the column allows nulls. Defaults to true.

Create a user_id bigint column without an index
add_reference(:products, :user, index: false)
Create a user_id string column
add_reference(:products, :user, type: :string)
Create supplier_id, supplier_type columns
add_reference(:products, :supplier, polymorphic: true)
Create a supplier_id column with a unique index
add_reference(:products, :supplier, index: { unique: true })
Create a supplier_id column with a named index
add_reference(:products, :supplier, index: { name: "my_supplier_index" })
Create a supplier_id column and appropriate foreign key
add_reference(:products, :supplier, foreign_key: true)
Create a supplier_id column and a foreign key to the firms table
add_reference(:products, :supplier, foreign_key: { to_table: :firms })
Show source
Register or log in to add new notes.
June 7, 2016
0 thanks

foreign_key option

It is also possible to specify that add_foreign_key should be added to the schema:

add_reference(:products, :supplier, foreign_key: true)