如何验证 Rails 中的日期?

2023-11-27

我想在 Ruby on Rails 中验证模型中的日期,但是,日、月和年值在到达我的模型时已转换为不正确的日期。

例如,如果我在视图中输入 2009 年 2 月 31 日,当我使用Model.new(params[:model])在我的控制器中,它将其转换为“2009 年 3 月 3 日”,然后我的模型将其视为有效日期,确实如此,但它是不正确的。

我希望能够在我的模型中进行此验证。我有什么办法可以吗,还是我的做法完全错误?

我找到了这个 ”日期验证” 讨论了这个问题,但从未得到解决。


我猜你正在使用date_select帮助程序生成日期的标签。另一种方法是对日、月、年字段使用选择表单助手。像这样(我使用的示例是created_at日期字段):

<%= f.select :month, (1..12).to_a, selected: @user.created_at.month %>
<%= f.select :day, (1..31).to_a, selected: @user.created_at.day %>
<%= f.select :year, ((Time.now.year - 20)..Time.now.year).to_a, selected: @user.created_at.year %>

在模型中,您验证日期:

attr_accessor :month, :day, :year
validate :validate_created_at

private

def convert_created_at
  begin
    self.created_at = Date.civil(self.year.to_i, self.month.to_i, self.day.to_i)
  rescue ArgumentError
    false
  end
end

def validate_created_at
  errors.add("Created at date", "is invalid.") unless convert_created_at
end

如果您正在寻找插件解决方案,我会查看验证时效性插入。它的工作原理如下(来自 github 页面):

class Person < ActiveRecord::Base
  validates_date :date_of_birth, on_or_before: lambda { Date.current }
  # or
  validates :date_of_birth, timeliness: { on_or_before: lambda { Date.current }, type: :date }
end 

可用的验证方法列表如下:

validates_date     - validate value as date
validates_time     - validate value as time only i.e. '12:20pm'
validates_datetime - validate value as a full date and time
validates          - use the :timeliness key and set the type in the hash.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证 Rails 中的日期? 的相关文章

随机推荐

  • 使用 NavigationController 在当前 tabBarController 上呈现视图控制器

    当呈现或关闭 VC 时 我不想继续隐藏和显示 tabBar 因为它会造成糟糕的用户体验 相反 我想直接在选项卡栏上呈现下一个 VC 这样当我通过从左向右缓慢拖动来关闭下一个 VC 时 我可以看到隐藏在视图后面的选项卡栏 如下图所示 请注意
  • 实现循环 UITableView

    实现循环 UITableView 的最佳方法是什么 当用户向上滚动到表格边界时 它不是显示空白 而是简单地循环环绕 这里的示例可能是选择星期几 一天 24 小时中的某个小时 或者全球范围内按顺序排序的时区 有一些如何解决这个问题的想法 可以
  • Spring Security 3-如何自定义用户名/密码参数?

    使用时如何自定义 UsernamePasswordAuthenticationFilter usernameParameter j username 和 passwordParameter j password 属性
  • java中的动态代理soap web服务客户端?

    有没有办法使用soap rpc Web服务 以便通过共享接口生成客户端 Restful Web 服务就是这样做的 但是基于肥皂的呢 您是否总是必须使用 Axis 或 CXF 等工具来生成存根和代理 或者是否有可以动态设置它的工具 Thank
  • 像关系数据库一样使用 Lucene

    我只是想知道我们是否可以在 lucene 中实现一些 RDBMS 功能 例子 1 我有 10 000 个项目文档 pdf 文件 必须对其内容进行索引 以便可供搜索 2 每个文档都与一个项目相关 项目可以包含项目名称 编号 开始日期 结束日期
  • 如何从ajax数据发送将pdf上传到服务器(使用jsPDF)

    我正在使用 jsPDF 在客户端生成 pdf 使用函数 doc save filename pdf 我可以下载它 现在我需要将其保存在服务器上 因此我使用 ajax 发送 pdf 数据并使用 PHP 脚本接收它 但生成的 pdfURL 上的
  • 在 #include 语句中使用垃圾字符时不会出现编译器错误

    include
  • 如何防止 EF Core 3.1 中的列更新?

    我从 Net Core 2 2 升级到 3 1 此功能已被弃用 modelBuilder Entity
  • 方案中的笛卡尔积

    我一直在尝试做一个返回n个集合的笛卡尔积的函数 在DrScheme中 集合以列表的形式给出 我一整天都在做这个 我想要一些指导方针 因为开始 稍后编辑 这是我想出的解决方案 我确信它不是迄今为止最有效或最简洁的 但我只学习了 3 周的方案
  • 获取带有改造的网站的 html - Android?

    我怎样才能获得一个网站的htmlretrofit 例如我有这个url我需要获取这个 url 的 html 以及如何加载更多 下面是我的代码 MainActivity java public class MainActivity extend
  • Flask 会话不持久

    我在 CentOS 6 3 上运行 Python 2 7 Apache mod wsgi 当我在本地主机上时 一切正常 但是 当我在 Azure 中的虚拟机上运行代码时 我没有看到会话信息跨页面保存 基本上在我看来 我有这样的想法 fron
  • mod_rewrite 错误 404 如果 .php

    我重写了我的网址以方便用户使用 例如 我有一个名为 user php 的页面 我将其重写为 user 但用户仍然可以使用 user php 如果他们请求扩展名为 php 的页面 我可以重定向到 404 吗 Options MultiView
  • AttributeError:“NoneType”对象没有属性“_instantiate_plugins”(无法导入create_engine)

    import os from sqlalchemy import create engine from sqlalchemy orm import scoped session sessionmaker engine create engi
  • html5,段落内的图/图标题给出了不可预测的输出

    以下标记使用figure元素来显示图像 该图像与段落的文本内联 因此该图 包含 在第一个元素内 p p div class object content p p div
  • Laravel Blade @include .html 文件

    将 HTML 文件包含在 Blade 中 我可以添加一个 html文件代替 php使用 Laravel 4 Blade My code include emails templates file file is email html fil
  • 模板类上的二元运算符重载

    我最近试图衡量我的运算符重载 模板能力 并作为一个小测试 创建了下面的 Container 类 虽然此代码在 MSVC 2008 下可以正常编译并正常工作 显示 11 但 MinGW GCC 和 Comeau 都在operator 超载 因
  • JPA 级联持久性与实体 ElementCollection 键

    我有两个像这样的 JPA 实体 Entity class Foo Id private long id Entity class Bar ElementCollection targetClass String class fetch Fe
  • 具有可变内容的不可变容器

    故事从我认为很简单的事情开始 我需要设计一个将使用一些 STL 容器的类 我需要让该类的用户访问这些容器的不可变版本 我不希望用户能够更改容器 他们不能push back 例如在列表上 但我希望用户能够更改包含的对象 使用back 并修改它
  • boost.filesystem create_directories 抛出 std::bad_alloc

    我有一个在 Windows XP SP3 中运行的使用 Boost 1 47 0 的 Visual Studio 2008 C 03 应用程序 电话boost filesystem create directories L c foo ba
  • 如何验证 Rails 中的日期?

    我想在 Ruby on Rails 中验证模型中的日期 但是 日 月和年值在到达我的模型时已转换为不正确的日期 例如 如果我在视图中输入 2009 年 2 月 31 日 当我使用Model new params model 在我的控制器中