Mam tabelę i próbuję dodać unikalny indeks do dwóch kolumn. Te kolumny również są indeksowane. Więc moje pytanie brzmi, czy mogę po prostu usunąć indeksy, które były tylko dla jednej kolumny, czy muszę użyć wszystkich trzech indeksów:
add_index "subscriptions", ["user_id"]
add_index "subscriptions", ["content_id"]
add_index "subscriptions", ["user_id"], ["content_id"], :unique => true
ruby-on-rails
activerecord
Markus
źródło
źródło
used_id
icontent_id
oddzielnych indeksów, jeśli masz również unikalny indeks obu kolumn. Prawdopodobnie dotyczy to również innych baz danych ... W przeciwieństwie do tego, czego się spodziewasz, będzie to miało negatywny wpływ na wydajność (zwłaszcza wstawienia / aktualizacje).Odpowiedzi:
add_index :subscriptions, [:user_id, :content_id], unique: true
źródło
%w(user_id content_id)
w ruby tworzy po prostu tablicę łańcuchów, nie jest to szczególne dla railsów. Możesz zrobić to samo,"user_id content_id".split
co nadal tworzy tablicę ciągów. Jestem pewien, że to wiesz, ten komentarz jest tylko po to, aby inni czytelnicy nie odnosili tego nieprawidłowo do szyn :)%w(user_id content_id)
to tablica ciągów. Który jest taki sam jak['user_id', 'content_id']
. Inną notacją dla tablicy symboli jest%i(user_id content_id)
, lub jak to napisał OP[:user_id, :content_id]