在按模型格式化之前更改日期字段数据?

时间:2013-12-01 14:01:28

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个模型,我们称之为帖子。 帖子有一个日期字段,指的是其他日期,created_on,updated_on e tc, 让我们调用这个字段custom_date。 当用户创建帖子并输入custom_date字段时,POST将显示为

params[:post][:custom_date] = "04/12/2013 01:01"

这是指日/月/年小时:分钟。 当我打电话

@post= Post.new(post_params)

然后检查@post,custom_date已重新格式化为2013-12-04,没有时间和分钟。我想格式是日期库(如果我错了,请纠正我)存储日期的方式。

但是,我想在这里得到时间和分钟。所以我想我可以在模型文件中以干净的方式实现这一点:

private
    def fix_dates_from_input
        self.start_date = DateTime.parse(self.custom_date) unless start_date.custom_date?
        render text: self.inspect
    end

在验证前调用它:

before_validation :fix_dates_from_input

然而,当它到达模型时,似乎日期已形成,因此我无法在那里更改它(因为我没有分钟或小时数据)。

我希望我能在控制器之外做到这一点, 还有另外一种方法吗?

1 个答案:

答案 0 :(得分:1)

您的数据库可能只存储日期而不是日期时间。

检查db / schema.rb文件以查看是否存在此问题。如果这是问题,它会说:

create_table :posts do |t|
  ...
  t.date :custom_date
  ...
end

什么时候看起来像这样:

create_table :posts do |t|
  ...
  t.datetime :custom_date
  ...
end

要解决此问题,您可能要返回并修复原始迁移(如果是新项目),或者如果您没有从头开始重建数据库,请创建新的迁移以解决问题:

从命令行:

rails g migration change_custom_date_type

然后编辑该文件:

class ChangeCustomDateType < ActiveRecord::Migration
  def change
    change_column :posts, :custom_date, :datetime
  end
end