Ich habe 2 Modelle Game
& amp; Theme
und sie haben eine has_and_belongs_to_many-Zuordnung. Ich habe viele Lösungen versucht, doppelte Datensätze in der Tabelle games_themes
zu verhindern, aber keine Lösungen funktionieren. Das Problem ist, games_themes
ist eine Tabelle, aber es ist kein Modell, also kann ich keinen Weg finden, Prüfungen effektiv durchzuführen.
Hier ist eine Lösung, die ich versucht habe
%Vor%Sie sollten die Validierung auf Datenbankebene verwenden:
%Vor%HABTM
Dies verhindert, dass Sie doppelte Daten in der Datenbank speichern. Lässt die Last von Rails & amp; stellt sicher, dass Sie nur ein Spiel oder ein Thema haben. Das Problem liegt darin, dass HABTM kein Modell hat. Es gibt keine Validierung, die Sie in Rails durchführen können, was bedeutet, dass Sie es auf db-level
setzen müssenWie in den Kommentaren erwähnt, bedeutet dies, dass Sie die Ausnahmen, die von der db ausgelöst werden, wie folgt behandeln müssen:
%Vor% Um Validierungen in der Join-Tabelle durchzuführen, sollten Sie stattdessen has_many :through
association verwenden.
Ссылка
Das Erstellen eines neuen Model GameTheme zur Validierung ist keine gute Idee. Wir können uns bei der Migration selbst validieren.
Theme Modell:
%Vor%Spielmodell:
%Vor%games_themes Migration: Sie können der Join-Tabelle Eindeutigkeit hinzufügen. Sehen Sie sich hier für weitere Details.
%Vor%Tags und Links ruby ruby-on-rails-3 ruby-on-rails associations