Ich bin neu in Bezug auf die Validierung von verschachtelten Attributen für ein bestimmtes Modell und ich finde es ziemlich unmöglich zu lösen.Rails-Validierung für verschachtelte Attribute in nur einem speziellen Modell
Ich habe ein Pharmacy model
nach unten:
class Pharmacy < ActiveRecord::Base
belongs_to :address
accepts_nested_attributes_for :address
validates :address, presence: true
validate :address_postcode_town
def address_postcode_town
errors.add(:'address.postcode', 'Postcode can't be blank') if address&.postcode.blank?
errors.add(:'address.town', "Town can't be blank") if address&.town.blank?
end
end
Ich habe auch eine Address model
, die derzeit wie folgt aussehen:
class Address < ActiveRecord::Base
validates :first_line, presence: true
end
Wie Sie sehen können, Adresse Anwesenheit ersten Zeile validiert und Ich muss eine Bestätigung für die Postleitzahl für Pharmacy
hinzufügen, und hier kommt der Teil, wenn ich verloren gehe.
I Validierung der Postleitzahl müssen, die ein Attribut Address
ist, nur für meine Pharmacy
und nicht für meine Order
Ich versuchte validates :postcode, presence: true
in meinem Address
Modell hinzufügen, aber dann ist es eine Voraussetzung für die Bestellung als auch, was ich nicht passieren will.
Ich habe auch versucht, ein before_validation
in meinem Pharmacy
Modell aber nicht sicher, ob das funktioniert, da die Ansicht nicht die postcode can't be blank
Meldung angezeigt wird:
before_validation :ensure_address_has_a_value
def ensure_address_has_a_value
return false if address.blank?
!address.postcode.blank? || !address.city.blank?
end
Wie kann ich die Validierung für verschachtelte Attribute nur in einem Modell hinzufügen , den anderen so lassen, wie sie sind?
Ich habe es geschafft, eine benutzerdefinierte Validierung zu erstellen, die funktioniert, aber jetzt erkennt die Ansicht postcode
noch town
nicht als erforderliche Attribute, daher ID zeigt die Fehlermeldung nicht. Es macht nur die Form wieder.
params
sind in der PharmacyController
und meiner Ansicht nach unten aussieht wie:
**simple_form_for :pharmacy goes here**
<%= f.simple_fields_for :address do |a|%>
<%= a.input :first_line, label: t('.first_line'), wrapper_html: {class: 'form-row'}%>
<%= a.input :second_line, label: t('.second_line'), wrapper_html: {class: 'form-row'}%>
<%= a.input :postcode, label: t('.postcode'), wrapper_html: {class: 'form-row'} %>
<%= a.input :town, label: t('.town'), wrapper_html: {class: 'form-row'} %>
Das bin ich nicht helfen Validation for nested attributes
jemand etwas Licht in diese Schuppen kann? Vielen Dank im Voraus!!
Dank helfen könnte, ich habe das versucht, aber die 'reject_if', wenn ich mich nicht irre, stützt sich auf den Werten des Modells, wo es eher eingestellt ist als auf die Werte, die aus dem zugehörigen Modell kommen. Ich muss die Attribute akzeptieren, wenn sie eine Bedingung erfüllen, und nicht, wenn das Modell, in dem sie akzeptiert werden müssen, ein spezifisches Merkmal hat. –
Ich glaube, Sie können etwas tun wie 'access_nested_attributes_for: Adresse reject_if: proc {| Attribute | Attribute ['PLZ']. leer? } ' in Ihrem' Apotheke' Modell. –
Ich habe es geschafft, eine benutzerdefinierte Validierung zu erstellen, die funktioniert, aber jetzt erkennt die Ansicht "PLZ" und "Stadt" nicht als erforderliche Attribute, daher zeigt ID die Fehlermeldung nicht. Es rendert nur das Formular wieder –