【发布时间】:2015-06-23 18:59:53
【问题描述】:
我目前正在尝试使自定义验证与日期输入一起工作,但不幸的是,它似乎不起作用。
应用程序内部有两个页面,索引页面和搜索页面。在索引页面内有一个输入日期的文本字段。我正在使用 Chronic gem 将文本解析为日期。如果日期无效,Chronic 将返回 nil。如果有效,则重定向到搜索页面并显示日期。
到目前为止我写的代码似乎不能正常工作,但我想要实现的是..
1) 验证 Chronic 不返回 nil
2) 验证日期是否大于今天的日期
请注意,我没有使用数据库,我只是希望能够在没有 ActiveRecord 的情况下验证输入的日期。如果有人可以帮助我,我们将不胜感激。
views/main/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 %>
views/main/search.html.erb
<%= @show_date %>
main_controller.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
models/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
没有验证,没有日期,什么都没有..
【问题讨论】:
-
现在
valid_date?不返回布尔值。如果没有错误,它不应该返回true,如果有则返回false? -
你的代码怎么不工作?是否存在您可以复制(并在此处显示)失败的情况?
-
@ABMagil 谢谢,我刚刚用问题的图片更新了我的答案。告诉我这是否有帮助
-
您的控制器代码与 Rails 标准相差甚远。浏览the guides 可能会很有帮助
标签: ruby-on-rails ruby validation activemodel chronic