【问题标题】:Render date and time fields for datetime column in Rails 5在 Rails 5 中为 datetime 列渲染日期和时间字段
【发布时间】:2017-02-24 15:43:46
【问题描述】:

我已经阅读并尝试了很多,但没有找到解决方案。

任务很简单:

我有一个 datetime 格式的 schedule_at 列。

我不想在我的表单中设置一个日期时间字段,而是将其拆分为两个字段:一个用于日期,一个用于时间。在我的表中,我想将其保留为一个日期时间字段。

所以在某些时候我必须将日期和时间加入到日期时间。由于我在模型中验证了日期时间,因此无法在控制器中执行此操作。

我尝试了一些方法:

  • 创建 attr_accessors(但我找不到在模型中加入日期和时间的方法)
  • 在浏览器端通过JS找到一些插件来解决这个问题
  • https://github.com/shekibobo/time_splitter,但它也不会加入值

我想很多应用都有这个问题,但仍然无法在互联网上找到解决方案。

您能提出任何解决方案吗?

【问题讨论】:

  • 为什么不能在控制器中加入这个?您可以同时允许日期和时间参数,然后这样做:将它们加入控制器中
  • 是的,我以前就是这么做的。但我有一些验证规则要在这个日期时间运行。据我了解,最好将这些东西放入模型中......
  • 是的,验证应该在模型中,但是您可以在将字段添加到对象之前在控制器中组合参数(并因此触发验证)
  • 当然...验证仅在调用 save() 时运行...谢谢!

标签: ruby-on-rails datetime simple-form ruby-on-rails-5


【解决方案1】:

在 rails 执行验证之前,使用 before validation 回调将两个字段合并为一个日期时间字段。

例子:

class YourClass < ActiveRecord::Base

  before_validation(on: :create) do
    self.your_field = do_stuff
  end

end

您可以在 Rails 指南中阅读更多关于 Active Record Callbacks 的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多