是的。您使用的
有没有办法用NOW((+INTERVAL 1 创建迁移
class AddFields < ActiveRecord::Migration[5.2]
def change
add_column :campaign_groups, :start_at, :datetime, null: false, defaut:->{NOW()}
add_column :campaign_groups, :end_at, :datetime, null: false, default:->{NOW() + INTERVAL 1 DAY}
end
end
当我运行rake-db:migrate时,我得到一个语法错误:
syntax error, unexpected tINTEGER, expecting do or '{' or '('
default:->{NOW() + INTERVAL 1 DAY}
now()
是数据库解释的数据库函数,而不是Ruby代码。您希望将now()
和now() + interval '1 day'
放入数据库,因此Lambda需要返回字符串:
default: -> { 'now()' }
default: -> { "now() + interval '1 day'" }
PS:您在:start_at
选项中的default:
(原来是:defaut
(中有一个拼写错误。
AFAIKnow()
和now + interval '1 day'
表达式是PostgreSQL特有的。如果你使用MySQL,那么你会想要使用current_timestamp
和current_timestamp + interval 1 day
:
default: -> { 'current_timestamp' }
default: -> { 'current_timestamp + interval 1 day' }