2016-02-05 34 views
5

Ho un progetto di migrazione di classe come questoModificare estera nome della colonna chiave nella rotaie

class CreateProjects < ActiveRecord::Migration 
def change 
    create_table :projects do |t| 
    t.string :title 
    t.text :description 
    t.boolean :public 
    t.references :user, index: true, foreign_key: true 

    t.timestamps null: false 
    end 
end 
end 

crea un nome di colonna user_id nella tabella di progetti, ma voglio dare un nome alla colonna di OWNER_ID modo da poter utilizzare al posto project.owner di project.user.

risposta

4

Si può fare in due modi:

#app/models/project.rb 
class Project < ActiveRecord::Base 
    belongs_to :owner, class_name: "User", foreign_key: :user_id 
end 

O

$ rails g migration ChangeForeignKeyForProjects 

# db/migrate/change_foreign_key_for_projects.rb 
class ChangeForeignKeyForProjects < ActiveRecord::Migration 
    def change 
     rename_column :projects, :user_id, :owner_id 
    end 
end 

poi:

$ rake db:migrate 
+9

ero felice di scoprire che 'rename_column' si occupa anche di indici di ridenominazione . – Subtletree

+1

Puoi anche usare ['change_table'] (http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table) con' t.rename' –

+0

Ricevo l'attributo sconosciuto 'new_id'? –

Problemi correlati