2016-06-16 2 views
1

레일 4.2.3을 사용하고 있습니다. 테이블과 동일한 유형의 테이블에 열을 추가하는 마이그레이션을 어떻게 만듭니 까? 또한 외래 키를 추가하려면 어떻게해야합니까? (열이 NULL이면 괜찮습니까?) 나는이레일스에서 ​​테이블과 동일한 유형의 테이블에 열/외래 키를 추가하는 마이그레이션을 어떻게 만듭니 까?

class AddLinkedMyObjectToMyObjects < ActiveRecord::Migration 
    def change 
    add_reference :my_objects, :linked_my_object, type: :my_object, index: true, foreign_key: true 
    end 
end 

을 시도하지만 난

== 20160616201701 AddLinkedMyObjectToMyObjects: migrating ============================= 
-- add_reference(:my_objects, :linked_my_object, {:type=>:my_object, :index=>true, :foreign_key=>true}) 
rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

PG::UndefinedObject: ERROR: type "my_object" does not exist 
LINE 1: ALTER TABLE "MyObjects" ADD "linked_my_object_id" my_object 
               ^
: ALTER TABLE "MyObjects" ADD "linked_my_object_id" my_object 
/Users/davea/.rvm/gems/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec' 
/Users/davea/.rvm/gems/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute' 
/Users/davea/.rvm/gems/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log' 

답변

1

내가 "수동으로"당신이 그것을 할 필요가 있다고 생각 마이그레이션 실행에이 오류가 발생했습니다 : 말하는 MyObject 클래스에 다음

add_column :my_objects, :linked_my_object_id, :integer 
add_index :my_objects, :linked_my_object_id 
add_foreign_key :my_objects, :my_objects, column: :linked_my_object_id 

을 이 :

belongs_to :linked_my_object, class_name: MyObject 
has_many :my_objects, foreign_key: :linked_my_object_id 
1

나는 비슷한 것을했다. 사용자를 참조하는 articles 테이블에 참조를 추가합니다. 그리고 기사 테이블 안에 user_id이라는 색인이 생성됩니다.

1

는 : 이주를 생성하는 명령이 될 것이다 :

rails generate migration add_user_id_to_articles user:references 

2 결과 마이그레이션 될 것이다 :

class AddUserIdToArticles < ActiveRecord::Migration 
    def change 
    add_reference :articles, :user, index: true, foreign_key: true 
    end 
end 

3

4 단말기 rake db:migrate 실행 : scheme.rb 파일에서이 마이그레이션 결과는 다음과 같습니다. 여기서 t.integer "user_id"가 추가 된 것을 볼 수 있습니다.

,210
create_table "articles", force: :cascade do |t| 
    t.string "title" 
    t.text  "body" 
    t.integer "visits_count" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "user_id" 

5 : 연결을 위해, 나는 user.rb 모델에서, 다음 모델에게

belongs_to :user 

그리고를 article.rb에 추가 할

has_many :articles 
관련 문제