【问题标题】:Automatically parsing date/time parameters in rails在 rails 中自动解析日期/时间参数
【发布时间】:2019-01-30 23:25:49
【问题描述】:

有没有办法在 Rails 中自动解析代表日期的字符串参数?或者,一些约定或巧妙的方式?

通过在控制器中执行 DateTime.parse(..) 手动进行解析,即使它在回调中看起来也不是很优雅。

还有另一种情况我不确定如何处理:如果模型中的日期字段可以为空,如果我收到的字符串不正确,我想返回一个错误(例如:用户提交201/801/01) .这也必须在控制器中完成,我没有找到一种聪明的方法来在模型上验证它作为验证。

【问题讨论】:

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


【解决方案1】:

如果您使用 ActiveRecord 来支持您的模型,您的日期和时间字段会在插入之前自动解析。

# migration
class CreateMydates < ActiveRecord::Migration[5.2]
  def change
    create_table :mydates do |t|
      t.date :birthday
      t.timestamps
    end
  end
end

# irb
irb(main):003:0> m = Mydate.new(birthday: '2018-01-09')
=> #<Mydate id: nil, birthday: "2018-01-09", created_at: nil, updated_at: nil>
irb(main):004:0> m.save
=> true
irb(main):005:0> m.reload
irb(main):006:0> m.birthday
=> Tue, 09 Jan 2018

所以它归结为验证日期格式,您可以使用正则表达式手动完成,也可以调用 Date.parse 并检查异常:

class Mydate < ApplicationRecord
  validate :check_date_format

  def check_date_format
    begin
      Date.parse(birthday)
    rescue => e
      errors.add(:birthday, "Bad Date Format")
    end
  end
end

【讨论】:

  • 这就是我所说的“手动解析”。我不想对我拥有的每个日期字段都这样做:)
  • 啊,我看到您编辑了您的问题以包含该问题。我会添加另一个答案
  • 是的,我没有看到自动解析正在发生。问题是如果字符串不好,它只会返回 nil
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 2020-11-06
  • 2019-01-31
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多