Rails migration: t.references with alternative name?

前端 未结 5 1050
情歌与酒
情歌与酒 2021-01-30 05:48

So I have a create_table like this for Courses at a School:

create_table :courses do |t|
  t.string :name
  t.references :course
  t.timestamps
end
相关标签:
5条回答
  • 2021-01-30 06:26

    I think this thread has a different more Rails-ish way: Scaffolding ActiveRecord: two columns of the same data type

    In the migration:

    t.belongs_to :transferrable_as

    t.belongs_to :same_as

    0 讨论(0)
  • 2021-01-30 06:28

    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"
    
    0 讨论(0)
  • 2021-01-30 06:29

    I don't think references accepts the :as option, but you can create your columns manually...

    create_table :courses do |t| 
      t.string  :name 
      t.integer :course1_id
      t.integer :course2_id 
      t.timestamps 
    end 
    
    0 讨论(0)
  • 2021-01-30 06:39

    You can do it this way:

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

    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_id
    add_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.timestamps
    end
    
    0 讨论(0)
  • 2021-01-30 06:48

    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}
    
    0 讨论(0)
提交回复
热议问题