How to set default values in Rails?

后端 未结 17 1372
醉话见心
醉话见心 2020-11-28 04:39

I\'m trying to find the best way to set default values for objects in Rails.

The best I can think of is to set the default value in the new method in

17条回答
  •  借酒劲吻你
    2020-11-28 04:49

    "Correct" is a dangerous word in Ruby. There's usually more than one way to do anything. If you know you'll always want that default value for that column on that table, setting them in a DB migration file is the easiest way:

    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
    

    Because ActiveRecord autodiscovers your table and column properties, this will cause the same default to be set in any model using it in any standard Rails app.

    However, if you only want default values set in specific cases -- say, it's an inherited model that shares a table with some others -- then another elegant way is do it directly in your Rails code when the model object is created:

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

    Then, when you do a GenericPerson.new(), it'll always trickle the "Doe" attribute up to Person.new() unless you override it with something else.

提交回复
热议问题