2017-05-24 3 views
0

Mein Problem ist, dass meine Fehlermeldungen nie gedruckt werden und ich glaube nicht, dass Validierung stattfindet. Ich habe noch nie zuvor Validierungen gemacht und versuche zu lernen, wie das geht.benutzerdefinierte Validierungsmethoden für Formulare

Controller:

def create 
    @requests = Request.new(request_params) 

    if @requests.save 
     redirect_to root_path 
     flash[:success] = "Your request has been submitted for approval" 
    else 
     render 'new' 
    end 
end 

anfordern Modell

class Request < ApplicationRecord 

validate :borrow_date_bigger_than_current_date, on: :create 

def borrow_date_bigger_than_current_date 
    if (:borrow_date.to_s < Date.today.to_s) 
     errors.add(:borrow_date, "Checkout date cannot be earlier than the current date") 
    end 
end 

und eine Form, die wie diese Bist Du sicher

form_for @requests do |request| 
<% if @requests.errors.any? %> 
    <div id="error_explanation"> 
    <h2><%= pluralize(@requests.errors.count, "error") %> prohibited this message from being saved:</h2> 
    <ul> 
     <% @requests.errors.full_messages.each do |msg| %> 
     <li> 
      <%= msg %> 
     </li> 
     <% end %> 
    </ul> 
    </div> 
    <% end %> 
... form stuff below here ... 
end 

Antwort

0

geht Sie dies tun wollen:

if (:borrow_date.to_s < Date.today.to_s) 

Sie vergleichen zwei Strings, nicht zwei Dates.

+0

Ich verwende ein date_field für borrow_date. Ich bekomme diesen Fehler "Vergleich von Symbol mit Datum fehlgeschlagen", wenn ich versuche, es zu vergleichen, ohne es zu einer Zeichenfolge zu machen. Ich habe tatsächlich einen anderen Ort, an dem wir eine Menge Fälle mit Daten vergleichen und diese in Strings umwandeln, und es scheint gut zu funktionieren. Ich denke immer noch, dass die Methode nicht ausgeführt wird, obwohl ich falsch liegen könnte. Vielen Dank für Ihre Antwort – codingdraculasbrain

+0

Sicher Sache. Übrigens könntest du immer bloß mit bloßen Fingerknöcheln darauf gehen und eine "Put" -Anweisung in die Validierung schreiben und sehen, was in der Konsole passiert. Dann wüssten Sie, ob es angerufen wird. – jvillian

+0

gab nur einen Versuch. Die Methode wird nicht ausgeführt. – codingdraculasbrain

Verwandte Themen