Bei den folgenden Modellen:Prevent doppelte has_many Datensätze in Rails 5
class Client < ApplicationRecord
has_many :preferences
validates_associated :preferences
accepts_nested_attributes_for :preferences
end
class Preference < ApplicationRecord
belongs_to :client
validates_uniqueness_of :block, scope: [:day, :client_id]
end
Ich bin noch in der Lage Vorlieben mit doppelten Tagen zu erstellen * wenn eine Charge von Präferenzen während der Client-Erstellung zu schaffen. Dies liegt (scheinbar) daran, dass der Fremdschlüssel client_id nicht verfügbar ist, wenn die Validierung validates_uniqueness_of
ausgeführt wird. (* Ich habe einen Index, der verhindert, dass das Duplikat gespeichert wird, aber ich möchte den Fehler abfangen und eine benutzerfreundliche Fehlermeldung zurückgeben, bevor er die Datenbank erreicht.)
Gibt es einen Weg zu verhindern dies durch ActiveRecord Validierungen?
EDIT: This appears to be a known issue.
ist 'client_id' gesetzt, wenn Sie eine benutzerdefinierte Validierung erstellen (dh' validate' off) – Kris
@Kris Nr. Related, wenn ich 'client_id' Präsenz Validierung hinzufügen,' client.save' wird fehlschlagen, weil (natürlich) 'client_id' existiert noch nicht. – pdoherty926