You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails:生成带约束时间戳的迁移命令及报错疑问

Rails迁移生成带非空默认时间戳的解决方案
  • 不存在能直接生成你目标代码的rails g migration命令,因为Rails迁移生成器无法直接识别-> { 'NOW()' }这种Lambda表达式参数。
  • 你执行命令时的报错“需要function”,是因为你直接写了default: NOW(),Rails把它当成了未定义的Ruby方法,而非数据库函数引用。
  • 最直接的解决步骤:
    1. 先生成基础的添加时间戳迁移:
      rails g migration AddTimestampsToModel timestamps:timestamp
      
    2. 打开生成的迁移文件,手动修改为目标代码:
      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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:01:02