Ruby on Rails:生成带约束时间戳的迁移命令及报错疑问
Rails迁移生成带非空默认时间戳的解决方案
- 不存在能直接生成你目标代码的
rails g migration命令,因为Rails迁移生成器无法直接识别-> { 'NOW()' }这种Lambda表达式参数。 - 你执行命令时的报错“需要function”,是因为你直接写了
default: NOW(),Rails把它当成了未定义的Ruby方法,而非数据库函数引用。 - 最直接的解决步骤:
- 先生成基础的添加时间戳迁移:
rails g migration AddTimestampsToModel timestamps:timestamp - 打开生成的迁移文件,手动修改为目标代码:
class AddTimestampsToModel < ActiveRecord::Migration[5.1] def change add_timestamps :model, null: false, default: -> { 'NOW()' } end end
- 先生成基础的添加时间戳迁移:
- 若想减少手动修改量,可以在生成命令里指定非空约束,之后再补充默认值:
执行命令:
生成的代码会自带rails g migration AddTimestampsToModel timestamps:timestamp{null:false}null: false,你只需添加default: -> { 'NOW()' }即可。
内容的提问来源于stack exchange,提问作者Frostyfx
相关产品推荐
相关产品推荐

