ruby-on-rails – Rails迁移将当前日期设置为默认值
发布时间:2020-12-16 19:57:49 所属栏目:百科 来源:网络整理
导读:我在表格中有一列列日期: create_table "test",:force = true do |t| t.date "day"end 我想将当前日期设置为此列的默认值. 我试试如下: create_table "test",:force = true do |t| t.date "day",:default = Date.todayend 但是默认是2月1日,所以如果我明天
我在表格中有一列列日期:
create_table "test",:force => true do |t| t.date "day" end 我想将当前日期设置为此列的默认值. create_table "test",:force => true do |t| t.date "day",:default => Date.today end 但是默认是2月1日,所以如果我明天创造新的纪录,那么今天还是2月1日(期望是2月2日) 感谢您的回应! 注意:我在rails 3中使用sqlite 解决方法
Rails在迁移中不支持动态默认值.
执行过程中迁移的任何内容都将设置在数据库级别,并保持这种方式,直到迁移被回滚,覆盖或重置为止.但是,您可以轻松地在模型级别添加动态默认值,因为它在运行时被评估. 1)使用after_initialize回调设置默认值 class Test def after_initialize self.day ||= Date.today if new_record? end end 仅当您需要在初始化之后访问该属性并保存该记录之前,才能使用此方法.该方法在加载查询结果时具有额外的处理成本,因为必须为每个结果对象执行块. 2)使用before_create回调设置默认值 class Test before_create do self.day = Date.today unless self.day end end 此回调由您的模型上的创建调用触发. class Test before_validation on: [:create,:update] do self.day = Date.today end end 3)使用default_value_for宝石 class Test default_value_for :day do Date.today end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |