1. ホーム
  2. ruby-on-rails

[解決済み】Rails: Railsのactiverecordのモデルで属性のデフォルト値を作成するにはどうすればよいですか?[重複している]。

2022-04-14 12:52:18

質問内容

ActiveRecordで属性を定義して、その属性のデフォルト値を作りたいのですが。デフォルトでは、レコードが作成されるたびに、属性にデフォルト値が設定されるようにしたいのです。 :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

class Task < ActiveRecord::Base
  before_save :default_values
  def default_values
    self.status ||= 'P' # note self.status = 'P' if self.status.nil? might be safer (per @frontendbeauty)
  end
end