Frage

Nehmen wir an, ich habe zwei Tische - Produkte und Bestellungen. Nehmen Sie zur Einfachheit an, dass jeweils nur ein Produkt gekauft werden kann, sodass es keine Join -Tabelle wie Order_items gibt. Die Beziehung besteht also aus, dass das Produkt viele Bestellungen hat und Reihenfolge zum Produkt gehört. Daher ist Product_id ein FK in der Bestellentabelle.

Die Produkttabelle ist sti - wobei die Unterklassen a, b, C. sind

Wenn der Benutzer unter Klassenprodukt C ordnet, müssen zwei spezielle Validierungen auf den Bestellmodellfeldern order_details und order_status überprüft werden. Diese beiden Felder können für alle anderen Produktunterklassen (dh A und B) nicht null sein. Mit anderen Worten, keine Validierung muss für diese beiden Felder ausgeführt werden, wenn ein Benutzer a und B. kauft

Meine Frage ist:

Wie schreibe ich Validierungen (vielleicht benutzerdefiniert?) Im Auftragsmodell, damit das Bestellmodell nur die Validierungen für seine beiden Felder ausführen kann - Order_details und Order_Status -, wenn die FK_ID zu Produkt -Unterklasse C in der Bestellentabelle gespeichert wird ?

War es hilfreich?

Lösung

Der Schlüssel ist, a hinzuzufügen validate Methode in der Order Modell, um nach Einzelheiten zu suchen:

  def validate
    if product and product.type_c?
      errors.add(:order_details, "can't be blank") if order_details.blank?
      # any other validations
    end
  end

Oder etwas in dieser Richtung. Überprüfen Sie einfach den Typ in validate und fügen Sie die entsprechenden Fehler hinzu. Ich habe gerade das erfunden type_c? Funktion. Überprüfen Sie einfach den Typ, aber Ihr Product Modell ist definiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top