【问题标题】:How to set the max date of being today for date_select in Rails?如何在 Rails 中为 date_select 设置今天的最大日期?
【发布时间】:2018-07-25 08:51:12
【问题描述】:

我有一个人可以选择出生日期的地方:

= form.date_select :date_of_birth, start_year: Date.current.year, end_year: Date.current.year - 333

我希望它具有今天的最大日期。 最大天数必须等于今天和最大月数。不仅是年份。

我试过“min: Date.today”和“max: Date.today”,但没有成功。

我该怎么做?

【问题讨论】:

  • date_select 无法限制范围。为此尝试一些 js 日期选择器/编写自己的

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

好的,根据我之前回答的负面观点,让我再解释一下。 Rails 日期选择器呈现三个选择,一个代表日,一个代表月,一个代表年。由于这是“固定的”,因此无法减少天数或月数。这将不再允许您选择有效日期。您唯一可以更改的是年份范围。您已经在示例代码中这样做了。

现在,回到您的用例。您想防止有人在未来输入日期吗?当然。您有三个选择:

  1. 仅验证此服务器端,通过模型验证和 向用户返回错误消息:“出生日期应该是 过去”。总是这样做!

以下是可以添加到 1 中的好东西:

  1. 通过JS捕获表单提交,查看提交日期和 在日期无效时显示错误
  2. 通过某种方式更改显示日期的方式 日期选择器插件。 jQuery UI 有几个不错的: https://jqueryui.com/datepicker/。这个可以让你更好 配置允许的日期,因为它是在客户端编程的

希望这会有所帮助。

【讨论】:

  • 即使使用客户端智能 UI,服务器端检查也是必须的。
  • 也许可以取消 just 服务器端检查。只需发出动态验证错误:"date: cannot be greater than #{Date.today}"。不是最好的用户体验,但需要两分钟才能实现。
  • @Jerry 您的问题得到解答。如果您觉得答案不令人满意,您能否提供一些比“重新阅读我的问题”更具建设性的反馈?
  • @Jerry 您不确定如何实施验证吗?或者如何实现一个 JS 日期选择器?或者,也许您正在寻找的只是一段盲目复制+粘贴的代码?
【解决方案2】:

暂时不要担心未来的日期。暂时忽略这些糟糕的条目。最好给模型添加一个验证,检查是否提交了date < Date.today。如果您确实希望进行前端/客户端验证,请寻找 JS/jQuery 日期选择器。这些更易于配置并支持直接内联错误消息。

【讨论】:

  • "如果您确实希望进行前端/客户端验证,请寻找 JS/jQuery 日期选择器。" -- 这个您的部分答案在正确的行上。但只是说“答案是不打扰”并没有多大帮助!
  • 我不认为标准的 Rails 日期选择器支持设置最大月份和/或日期,因为这是不可能的,因为它是在后端呈现的。但我会调整答案。
猜你喜欢
  • 1970-01-01
  • 2016-12-06
  • 2015-11-29
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
相关资源
最近更新 更多