小编典典

Rails:如何为 Rails activerecord 模型中的属性创建默认值?

all

我想通过在 ActiveRecord 中定义属性来创建属性的默认值。默认情况下,每次创建记录时,我都希望为 attribute
设置一个默认值:status。我试图这样做:

class Task < ActiveRecord::Base
  def status=(status)
    status = 'P'
    write_attribute(:status, status)
  end
end

但是在创建时我仍然从数据库中检索到这个错误:

ActiveRecord::StatementInvalid: Mysql::Error: Column 'status' cannot be null

因此我认为该值未应用于该属性。

在 Rails 中执行此操作的优雅方式是什么?

非常感谢。


阅读 58

收藏
2022-06-30

共1个答案

小编典典

您可以为迁移中的列设置默认选项

....
add_column :status, :string, :default => "P"
....

或者

您可以使用回调,before_save

class Task < ActiveRecord::Base
  before_save :default_values
  def default_values
    self.status ||= 'P' # note self.status = 'P' if self.status.nil? might better for boolean fields (per @frontendbeauty)
  end
end
2022-06-30