Rails: How do I create a default value for attributes in Rails activerecord's model?

activerecord, ruby-on-rails

Solution

You can set a default option for the column in the migration

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

OR

You can use a callback, `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

Problem

I want to create a default value for an attribute by defining it in ActiveRecord. By default everytime the record is created, I want to have a default value for attribute `:status`. I tried to do this: ``` class Task < ActiveRecord::Base def status=(status) status = 'P' write_attribute(:status, status) end end ``` But upon creation I still retrieve this error from the database: ``` ActiveRecord::StatementInvalid: Mysql::Error: Column 'status' cannot be null ``` Therefore I presume the value was not applied to the attribute. What would be the elegant way to do this in Rails? Many thanks.

Original source

Related problems