我有一个模型,我们称之为帖子。 帖子有一个日期字段,指的是其他日期,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
然而,当它到达模型时,似乎日期已形成,因此我无法在那里更改它(因为我没有分钟或小时数据)。
我希望我能在控制器之外做到这一点, 还有另外一种方法吗?
答案 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