使用Rails创建带有草稿状态的新记录
使用Rails创建带有草稿状态的新记录
我有一个具有以下字段的投资组合模型:
名称:字符串(必填)
状态:字符串(必填),可选值为:草稿、活动、已获资金
其中一个要求是新创建的投资组合应该具有草稿状态。我可以在迁移中设置一个默认值,类似于:
创建表格:portfolios do |t|
t.string :name, null: false
t.string :status, null: false, default: 'draft'
t.timestamps
end
但我认为这样很难维护。当然,我可以在创建方法中设置此状态,例如:
Portfolio.create!(
name: params[:name],
status: 'draft'
)
有没有更好的方法来创建这样的记录?也许模型内部有一些方法吗?
Rails create new record with draft status
在Rails中创建具有草稿状态的新记录
问题的原因:在创建新记录时,希望默认将其状态设置为“草稿”,但是默认情况下,Rails会将其状态设置为空。
解决方法:使用after_initialize回调来设置默认值,以确保在对象的生命周期的早期阶段就有默认值存在。
class Portfolio < ApplicationRecord after_initialize do self.name = "draft" end end
通过使用after_initialize回调,可以确保在对象的生命周期的早期阶段就将默认值设置为"草稿",从而解决了默认状态为空的问题。
Portfolio.new.name #应该返回"草稿"