Raylar 4.x
Ne zaman zaten users ve uploadstabloları ve isteyen yeni bir ilişki eklemek aralarında.
Tek yapmanız gereken aşağıdaki komutu kullanarak bir taşıma oluşturmaktır:
rails g migration AddUserToUploads user:references
Bir taşıma dosyası şu şekilde oluşturulur:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Ardından, taşıma işlemini kullanarak çalıştırın rake db:migrate. Bu göç adlı yeni sütun ekleyerek ilgilenir user_idiçin uploadstablodaki (referans idsütunu userstabloya), ARTI aynı zamanda yeni bir sütun üzerinde dizin ekleyecektir.
GÜNCELLEME [Rails 4.2 için]
Referans bütünlüğünü korumak için raylara güvenilemez; ilişkisel veritabanları kurtarmaya geliyor. Bunun anlamı, veritabanı düzeyinde yabancı anahtar kısıtlamaları ekleyebilmemiz ve veritabanının bu küme referans bütünlüğünü ihlal eden herhangi bir işlemi reddetmesini sağlayabilmemizdir. @ İnfofo'nun yorumladığı gibi, Rails 4.2 yabancı anahtarlar için yerel destekle birlikte gelir (referans bütünlüğü) . Gerekli değildir, ancak yukarıda oluşturduğumuz referansa yabancı anahtar (çok yararlı olduğu için) eklemek isteyebilirsiniz.
Varolan bir referansa yabancı anahtar eklemek için , yabancı bir anahtar eklemek için yeni bir göç oluşturun:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Yabancı anahtarla tamamen yeni bir referans oluşturmak için (Rails 4.2'de) , aşağıdaki komutu kullanarak bir taşıma oluşturun:
rails g migration AddUserToUploads user:references
bir taşıma dosyası şu şekilde oluşturulur:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Bu user_id, uploadstablonun sütununa yeni bir yabancı anahtar ekleyecektir . Anahtaridusers tablodaki sütuna başvurur.
NOT: Bu, bir başvuru eklemeye ek olarak, ilk önce yabancı anahtardan sonra bir referans oluşturmanız gerekir ( aynı geçişte veya ayrı bir geçiş dosyasında bir yabancı anahtar oluşturmayı seçebilirsiniz ). Active kayıt sadece tek sütun yabancı anahtarlarını destekler ve şu anda sadece mysql, mysql2ve PostgreSQLadaptörleri desteklenmektedir. Bunu sqlite3, vb. Gibi diğer adaptörlerle denemeyin . Referans için Ray Kılavuzları: Yabancı Anahtarlar'a bakın.