2017-05-24 123 views
0

我的問題是,我的錯誤消息從不打印,我不認爲正在發生驗證。我從來沒有做過驗證,並且正在努力學習如何做到這一點。表單的自定義驗證方法

控制器:

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 

請求模型

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 

而且是這樣的

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 

回答

0

你確定你想這樣做的一種形式:

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

您正在比較兩個Strings,而不是兩個Dates

+0

我正在爲borrow_date使用date_field。如果我嘗試比較它而沒有將其作爲字符串,則會出現此錯誤「符號與日期比較失敗」。實際上,我有另一個地方,我們將一堆案件與日期進行比較,然後將它們轉換爲字符串,並且它似乎正常工作。儘管我可能是錯的,但我仍然認爲這個方法沒有執行。謝謝你的回覆 – codingdraculasbrain

+0

當然可以。順便說一下,你總是可以直接在它上面做一個關節,並在驗證中加上一個'put'語句,看看在控制檯中會發生什麼。然後你會知道它是否被調用。 – jvillian

+0

只是給了一個嘗試。該方法未執行。 – codingdraculasbrain