2017-01-29 7 views
0

Ich habe ein Problem mit einem Modell. Ich habe ein Modell, das durch 2 Formulare aktualisiert wird (da 2 Personen separate Daten eingeben müssen). Formular 1 enthält die erste Hälfte der erforderlichen Daten und daher müssen nur diese Daten dort validiert werden.Überprüfen Sie für Params für separate Formulare für 1 Modell

Ich habe Probleme, einen Weg zu finden, nur die Daten zu validieren, die in Formular 1 eingegeben wurden. Unten finden Sie meine Subscribe.rb-Modelldatei.

class Subscription < ActiveRecord::Base 
    # werkgever form 

    if form_id == 'form1' 
    validates :email, presence: true 
    end 

    # werknemer form 
    if form_id == 'form2' 
    validates :name, presence: true 
    validates :city presence: true 
    end 
end 

Ich brauche das, wenn Aussagen etwas enthalten, die es machen würde, so dass nur die Werte in dieser Form bereitgestellten Erzeugnisart validiert werden, so dass ich bekommen Fehler auf form2 nicht, wann und umgekehrt zu aktualisieren.

Ich hoffe, das ist klar genug. Jede Hilfe wird geschätzt. Danke.

+2

Wie unterscheiden Sie für 1 und Form 2? Ich denke, sie in verschiedene Formen mit einem "Formularobjekt" (https://robots.thoughtbot.com/activemodel-form-objects) zu trennen, wäre in dieser Situation am idealsten. –

+0

Hier ist eine verwandte Frage http://stackoverflow.com/questions/24641143/rails-conditional-validation-in-model Fühlen Sie sich frei, virtuelle Attribute zu Ihrem Modell hinzuzufügen und es als verstecktes Feld über das Formular zu übergeben. – taro

Antwort

1

Sie könnten Validierungen mit Bedingung festgelegt:

attr_accessor :form_type  

validates :email, presence: true, :if => :werkgever_form? 

def werkgever_form? 
    form_type == 'werkgever' 
end 

: form_type ist ein virtuelles Attribut, das nur dann gespeichert, nicht für Validierungen in der Datenbank und benötigt. Sie können dieses Attribut als verstecktes Feld in jeder Form gesetzt:

<%= form.hidden_field :form_type, 'werkgever' %> 
+0

Danke für diese Dmitry, das hat für mich funktioniert! –

1
attr_accessor :form_type 
validates :email, presence: true, if: :check_if_form_one 
validates :name, presence: true, unless: :check_if_form_one 
validates :city presence: true, unless: :check_if_form_one 

def check_if_form_one 
    /* Add your condition here 
    example: form_type == 'form1' */ 
end 

Sie form_type von Controller-Methode oder Ansichtsseite einstellen.

Verwandte Themen