Skip to content
scambra edited this page Apr 27, 2012 · 4 revisions

How to set default values to new records

Active Scaffold use default values in new records the same way any active record model does, that is, using defaults defined in database. However, sometimes you need something more flexible than altering database or add some logic to it.

By following advice from Jeff Perrin at stackoverflow, you may use after_initialize from active record:

    class Person
        has_one :address
        after_initialize :init
    
        def init
          self.number  ||= 0.0           #will set the default value only if it's nil
          self.address ||= build_address #let's you set a default association
        end
    end 

If you need to use some request parameters or session info, or if you don't want to add after_initialize callback, you can override do_new method in the controller:

    class PeopleController < ApplicationController
        protected
        def do_new
            super
            @record.owner = current_user
        end
     end
Clone this wiki locally