2016-11-24 5 views
0

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!!

Antwort

0

Dies ist das erste Ergebnis der Google-Suche, die http://homeonrails.com/2012/10/validating-nested-associations-in-rails/

+0

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. –

+0

Ich glaube, Sie können etwas tun wie 'access_nested_attributes_for: Adresse reject_if: proc {| Attribute | Attribute ['PLZ']. leer? } ' in Ihrem' Apotheke' Modell. –

+0

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 –

Verwandte Themen