Rails migration: t.references with alternative name? Rails migration: t.references with alternative name? ruby-on-rails ruby-on-rails

Rails migration: t.references with alternative name?


You can do this all in the initial migration/column definition (at least currently in Rails 5):

t.references :transferable_as, index: true, foreign_key: {to_table: :courses}t.references :same_as, index: true, foreign_key: {to_table: :courses}


You can do it this way:

create_table :courses do |t|  t.string :name  t.references :transferrable_as  t.references :same_as  t.timestampsend

or using t.belongs_to as an alias for t.references

You can't add foreign_key: true to those two references lines. If you want to mark them as foreign keys at the database level you need to have a migration with this:

add_foreign_key :courses, :courses, column: :transferrable_as_idadd_foreign_key :courses, :courses, column: :same_as_id

Update

In Rails 5.1 and above you can add the foreign key in the migration in the create_table block like this:

create_table :courses do |t|  t.string :name  t.references :transferrable_as, foreign_key: { to_table: 'courses' }  t.references :same_as, foreign_key: { to_table: 'courses' }  t.timestampsend


As an added answer to this question -- the Model should have the following line to complete the association:

    belongs_to :transferrable_as, class_name: "Course"    belongs_to :same_as, class_name: "Course"