我目前正在尝试使用日期输入进行自定义验证,但不幸的是,它似乎不起作用。
应用程序内部有两个页面,索引页面和搜索页面。在索引页面内有一个输入日期的文本字段。我正在使用将文本解析为日期的Chronic gem 。如果日期无效,Chronic 将返回 nil。如果有效,它会重定向到搜索页面并显示日期。
到目前为止我编写的代码似乎无法正常工作,但我想要实现的是..
1) 验证 Chronic 不会返回 nil
2)验证该日期大于今天的日期
请注意,我没有使用数据库,我只是希望能够在没有 ActiveRecord 的情况下验证输入的日期。如果有人可以帮助我,您的帮助将不胜感激。
意见/主要/index.html.erb
<%= form_tag({controller: "main", action: "search"}, method: "get") do %>
<%= label_tag(:q, "Enter Date:") %>
<%= text_field_tag(:q) %>
<%= submit_tag "Explore", name: nil %>
<% end %>
意见/主要/search.html.erb
<%= @show_date %>
主控制器.rb
def search
passed_info = Main.new
if passed_info.valid_date?
@show_date = passed_info
else
flash[:error] = "Please enter correct date!"
render :index => 'new'
end
end
模型/main.rb
class Main
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :q
validates_presence_of :q
def initialize(params={})
params.each do |attr, value|
self.public_send("#{attr}=", value)
end if params
end
def persisted?
false
end
def valid_date?
require 'chronic'
if Chronic.parse(q).nil? || Chronic.parse(q) < Time.today
errors.add(:q, "is missing or invalid")
end
end
end
编辑:
这就是问题所在...
本地主机:3000
然后它重定向到..
localhost:3000/main/search?utf8=%E2%9C%93&q=invalid+date+test
没有验证,没有日期,什么都没有。