Raylar 4.x
Ne zaman zaten users
ve uploads
tabloları 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_id
için uploads
tablodaki (referans id
sütunu users
tabloya), 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
, uploads
tablonun sütununa yeni bir yabancı anahtar ekleyecektir . Anahtarid
users
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
, mysql2
ve PostgreSQL
adaptörleri desteklenmektedir. Bunu sqlite3
, vb. Gibi diğer adaptörlerle denemeyin . Referans için Ray Kılavuzları: Yabancı Anahtarlar'a bakın.