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

[解決済み] Railsでデフォルト値を設定するには?

2022-09-16 12:16:11

質問

Railsのオブジェクトにデフォルト値を設定するのに最適な方法を探しています。

私が思いつく最良の方法は、デフォルト値を new メソッドで設定することです。

これが許容範囲なのか、もっと良い方法があるのか、どなたかご意見をお聞かせください。

どのように解決するのですか?

Rubyにおいて「正しい」というのは危険な言葉です。 何事にも複数のやり方があるのが普通です。 もし、あなたが 常に テーブルのそのカラムのデフォルト値が必要だとわかっている場合、DBマイグレーションファイルでそれらを設定することが最も簡単な方法です。

class SetDefault < ActiveRecord::Migration
  def self.up
    change_column :people, :last_name, :type, :default => "Doe"
  end

  def self.down
    # You can't currently remove default values in Rails
    raise ActiveRecord::IrreversibleMigration, "Can't remove the default"
  end
end

ActiveRecordはテーブルとカラムのプロパティを自動検出するので、標準的なRailsアプリでこれを使ったモデルには、同じデフォルトが設定されることになります。

しかし、特定のケースでのみデフォルト値を設定したい場合、たとえばテーブルを他のものと共有する継承モデルであれば、モデルオブジェクトの作成時にRailsのコードで直接設定することも、エレガントな方法と言えます。

class GenericPerson < Person
  def initialize(attributes=nil)
    attr_with_defaults = {:last_name => "Doe"}.merge(attributes)
    super(attr_with_defaults)
  end
end

次に GenericPerson.new() を実行すると、常に "Doe"属性が Person.new() で上書きしない限り、常に