Ruby on Rails自动生成时间戳表迁移文件语法错误求助
问题分析与解决
这个语法错误其实很好修复——你在调用t.timestamps的时候多写了一个不必要的逗号!
Ruby的关键字参数(比如这里的default:)不需要在方法名后面加逗号分隔,你原来的代码里t.timestamps, default: -> { 'NOW()' }中的逗号让Ruby误以为你要传递位置参数,后面的default:被当成了代码标签,这就触发了语法错误。
修正后的迁移文件
class CreateCustomerOrders < ActiveRecord::Migration[6.0] def change create_table :customer_orders do |t| t.bigint :order_id t.string :customer_email t.timestamps default: -> { 'NOW()' } end end end
额外小提示
如果你需要对created_at和updated_at设置不同的默认值,或者想要更明确的代码结构,也可以分开定义这两个字段:
class CreateCustomerOrders < ActiveRecord::Migration[6.0] def change create_table :customer_orders do |t| t.bigint :order_id t.string :customer_email t.datetime :created_at, default: -> { 'NOW()' } t.datetime :updated_at, default: -> { 'NOW()' } end end end
这样写的好处是,后续如果只需要修改其中一个字段的默认值,会更直观方便。
内容的提问来源于stack exchange,提问作者Remy Wang
相关产品推荐
相关产品推荐

