Raylarda iki sütuna benzersiz bir dizin nasıl uygulanır


97

Bir tablom var ve iki sütuna benzersiz bir dizin eklemeye çalışıyorum. Bu sütunlar da indekslenir. Öyleyse sorum şu ki, sadece bir sütun için olan dizinleri kaldırabilir miyim veya üç dizini de kullanmam gerekirse:

add_index "subscriptions", ["user_id"]
add_index "subscriptions", ["content_id"]
add_index "subscriptions", ["user_id"], ["content_id"], :unique => true

5
Bir yan not olarak: MySQL kullanıyorsanız , her iki sütunun da benzersiz bir dizinine sahipseniz , sizin used_idve content_idayrı dizinlerde olmanın bir anlamı yoktur . Bu muhtemelen diğer DB'ler için de geçerlidir ... Beklediğinizin aksine, performans üzerinde olumsuz bir etkisi olacaktır (özellikle eklemeler / güncellemeler).
hurikhan77

Yanıtlar:


191
add_index :subscriptions, [:user_id, :content_id], unique: true

6
Alternatif sözdizimleri de vardır: add_index: subscriptions, [: user_id,: content_id],: unique => true add_index: subscriptions,% w (user_id content_id),: unique => true Bunlar aynı şey, sadece farklı sözdizimi sütunları belirlemek için.
François Beausoleil

14
@ FrançoisBeausoleil %w(user_id content_id)Ruby'de sadece bir dizi dizgi yaratır, bu raylara özel değildir. Aynı şeyi "user_id content_id".splithala bir dizi dize oluştururken yapabilirsiniz. Bunu bildiğinizden eminim, bu yorum sadece diğer okuyucular bunu raylarla yanlış bir şekilde ilişkilendirmemesi için :)
Khaja Minhajuddin

Tablo oluşturmada bunun sözdizimi ne olabilir? <- yanıt bulundu ( stackoverflow.com/questions/4870961/… )
2018

Bunu kullandıktan sonra tuhaf bir sorun yaşıyorum. Rake db: migrate kullanılarak herhangi bir yeni taşıma çalıştırılamıyor. Yalnızca rake db: migrate: yukarı VERSION = 20180411062714 sürüm numarası kullanılarak bir seferde bir dosya taşıma çalıştırılabilir. Zaten iki sütunda benzersiz doğru yaptığım tabloda verilerim vardı.
thedudecodes

1
@ FrançoisBeausoleil Aslında aynı şey değiller %w(user_id content_id), bir Strings Dizisi. İle aynı olan ['user_id', 'content_id']. Sembol Dizisinin farklı notasyonu %i(user_id content_id)veya OP'nin yazdığı şekliyle[:user_id, :content_id]
Sasa Blagojevic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.