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
私はborrow_dateにdate_fieldを使用しています。文字列にすることなく比較しようとすると、このエラー "シンボルと日付の比較に失敗しました"が表示されます。私は実際には、大量のケースと日付を比較し、それらを文字列に変換する別の場所があり、正常に動作するようです。私はまだ方法が実行されていないと思うが、私は間違っているかもしれない。あなたの返信ありがとう – codingdraculasbrain
確かに。ちなみに、あなたはいつも裸のナックルをして、検証に「put」ステートメントを入れ、コンソールで何が起こるか見ることができます。その後、それが呼び出されたかどうかを知ることができます。 – jvillian
ちょうどそれを試してみました。このメソッドは実行されていません。 – codingdraculasbrain