2016-06-28 12 views
1

Ist das erste Mal, dass ich eine benutzerdefinierte Validierung erstellen, da der Versuch, die ORM-Validierungen zu versuchen, nicht funktioniert hat. Ich habe ein Modell namens AdGroup, das zu einem anderen Modell namens Car gehört. Ich möchte verhindern, dass ein Nutzer eine neue Anzeigengruppe erstellt, wenn er kein Auto ausgewählt hat. Auch das Auto ist eine Datei.Wie kann ich ein zugehöriges Modell validieren?

class AdGroup < ActiveRecord::Base 
    belongs_to :car 
    validate :validate_car_id 

    def validate_car_id 
    car = Car.find_by(id: params[:id]) 
    if car.nil? 
     errors.add(:car, "Select a car image") 
    end 
    end 
end 

class Car < ActiveRecord::Base 
    validates :make, :model, :year, presence: true     
    validates :file, presence: true 
    belongs_to :make 
    has_many :ad_groups 

    ... 
end 

Ist ein Bild, das ich versuche auszuwählen.

+0

Sie sollten Ihre Modelldefinition zu der Frage hinzufügen. –

+0

Ist das die vollständige Definition? Sie sollten hier sowohl "AdGroup" - als auch "Car" -Modelle hinzufügen, einschließlich der Linien, die ihre Zuordnung zueinander definieren (z. B. "has_many" oder "gehört zu"). –

+0

Wenn Ihnen eine Antwort nützlich ist, sollten Sie sie annehmen oder dafür stimmen. –

Antwort

1

Ihr Anzeigengruppenmodell muss mit dem Fahrzeugmodell verknüpft sein. AdGroup-Modelle sollten die Zeile belongs_to :car haben und das Automodell benötigt has_many :ad_groups.

Um verknüpfte Modelle zu validieren, können Sie ActiveRecord validates_associated verwenden. Stellen Sie sicher, dass Sie die Dokumente über den Link für Fehler lesen.

class AdGroup < ActiveRecord::Base 
    belongs_to :car 

    validates :car, presence: true 
    validates_associated :car 
end 

Wenn validates_associated verwenden Sie müssen benutzerdefinierte Validierung nicht tun.

+0

mit validates_associated Sie brauchen keine benutzerdefinierte Validierung mehr? –

+0

Das ist richtig, ich habe meine Antwort aktualisiert. –

Verwandte Themen