【问题标题】:Rails create new record with draft statusRails 以草稿状态创建新记录
【发布时间】:2021-05-25 06:03:37
【问题描述】:

我有一个带有以下字段的 portfolio 模型:

name: string (required)
status: string (required) one of: draft, active, funded

其中一项要求是新创建的投资组合应具有状态草稿。我可以在迁移中设置一个默认值,例如:

create_table :portfolios do |t|
  t.string :name, null: false
  t.string :status, null: false, default: 'draft'

  t.timestamps
end

但我认为维护起来并不容易。当然我可以在 create 方法中设置这个状态,比如:

Portfolio.create!(
  name: params[:name],
  status: 'draft'
)

有没有更好的方法来创建这样的记录?也许是模型内部的一些方法?

【问题讨论】:

  • 这作为枚举字段可能会更好。见stackoverflow.com/a/63018877/2981429
  • 该死,现在不知道为什么,但在rails new test_app --skip-test --database=postgresql 之后,它会用6.0.3.5 创建我的rails。如果我知道我会使用 6.1
  • after_saved 回调会做,或者创建数据后调用的任何回调
  • 设置默认列值是可行的方法。维护起来并不难。 ActiveRecord 对此也很聪明,并在实例化该模型的实例时将其用作默认值,因此 Portfolio.new.status => 'draft'

标签: ruby-on-rails ruby


【解决方案1】:
class Portfolio < ApplicationRecord
  after_initialize do
    self.name = "draft"
  end
end 

我认为最好使用 after_initialize,因为这个回调将保证从对象生命周期的一开始就存在默认值

Portfolio.new.name
#shoudl give you draft

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多