2017-05-24 19 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) 

2つではなくStringsの2つを比較しています。Datesです。

+0

私はborrow_dateにdate_fieldを使用しています。文字列にすることなく比較しようとすると、このエラー "シンボルと日付の比較に失敗しました"が表示されます。私は実際には、大量のケースと日付を比較し、それらを文字列に変換する別の場所があり、正常に動作するようです。私はまだ方法が実行されていないと思うが、私は間違っているかもしれない。あなたの返信ありがとう – codingdraculasbrain

+0

確かに。ちなみに、あなたはいつも裸のナックルをして、検証に「put」ステートメントを入れ、コンソールで何が起こるか見ることができます。その後、それが呼び出されたかどうかを知ることができます。 – jvillian

+0

ちょうどそれを試してみました。このメソッドは実行されていません。 – codingdraculasbrain

関連する問題