10

Yabancı anahtar ekleyerek farklı tablo adlarını nasıl atayabilirim?Farklı tablo adıyla geçişler için yabancı anahtar nasıl eklenir?

class CreatePostComments < ActiveRecord::Migration 
    def change 
    create_table :post_comments do |t| 
    t.belongs_to :post, index: true 
    t.timestamps null: false 
    end 
    add_foreign_key :post, :class_name => MyPost 
    end 
end 

Ama çalışmıyor:

örneğin ben

class MyPost < ActiveRecord::Base 
    has_many :comments, class_name: PostComment 
end 

class PostComment < ActiveRecord::Base 
    belongs_to :post, class_name: MyPost 
end 

gibi bir modeli Şimdi ben böyle benim göç dosyasını değiştirmek istiyorum var. Göç iptal ediliyor. Model dosyam ile çalışmak için geçiş dosyamı nasıl değiştiririm.

+1

't.belongs_to: post, endeksi: sizin için yabancı anahtar yarattı TRUE . Neden yine deniyorsun? Yapmaya çalıştığınız şeyi alamıyorum .. –

+0

Taşıma işleminiz tarafından oluşturulan hata nedir? – nayiaw

cevap

0

bu

class CreatePostComments < ActiveRecord::Migration 
    def change 
    create_table :post_comments do |t| 
     t.references :my_post, index: true 
     t.timestamps null: false 
    end 
    add_foreign_key :my_post, :post_comments 
    end 
end 
+0

't.references: my_post' varsayılan tablo adını kullanır. Soru "farklı tablo adı" ile ilgili: 't.references'lar olmalıdır:' – Djunzu

13

Aşağıdaki yabancı anahtar için seçeneklerinde geçirebilirsiniz:

class CreatePostComments < ActiveRecord::Migration 
    def change 
    create_table :post_comments do |t| 
     t.references :post, foreign_key: { to_table: :my_posts }, index: true 
     t.timestamps null: false 
    end 
    end 
end 

Eğer benzersiz kısıtlama eklemek istediğinizde, ayrıca dizin seçeneği için de geçerlidir: Btw

t.references :post, foreign_key: { to_table: :my_posts }, index: { unique: true} 

.: referanslar, belongs_to için bir takma addır veya daha kesin olması için, referanslar için bir takma addır.

uygulanmasında ayrıntılara bakın:

raylar 5.0.rc2: https://github.com/rails/rails/blob/v5.0.0.rc2/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L68

4.2 raylar: https://github.com/rails/rails/blob/v4.2.6/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L312

+2

'index' varsayılan olarak true'dur. 'index: true' gereksizdir. – developer033

+2

['index', varsayılan olarak Rails 5'ten doğrudur] (http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference). ['index ', önceki Rails sürümlerinde varsayılan olarak' false ') (http://api.rubyonrails.org/v4.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference). – cbliard

İlgili konular