我想通过在 ActiveRecord 中定义属性来创建属性的默认值。默认情况下,每次创建记录时,我都希望为 attribute 设置一个默认值:status。我试图这样做:
: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 中执行此操作的优雅方式是什么?
非常感谢。
您可以为迁移中的列设置默认选项
.... add_column :status, :string, :default => "P" ....
或者
您可以使用回调,before_save
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