2016-02-05 10 views
5

Ich mag diesesändern Fremdschlüsselspaltennamen in Schienen

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 

es einen Spaltennamen user_id in Projekten Tabelle erstellt, aber ich möchte ein Migrations Klasse-Projekt haben die Spalte nennen OWNER_ID, so kann ich project.owner stattdessen von project.user.

Antwort

4

Sie können es zwei Möglichkeiten:

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

ODER

$ 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 

dann:

$ rake db:migrate 
+9

Ich war glücklich, zu erfahren, dass 'rename_column' auch um die Umbenennung Indizes nimmt . – Subtletree

+1

Sie können auch ['change_table'] (http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table) mit' t.rename' verwenden. –

+0

Ich bekomme unbekanntes Attribut 'new_id'? –