[LRUG] Setting default roles in a user record

James Adam james.adam at gmail.com
Tue Aug 7 08:14:39 PDT 2007

On 8/7/07, Tim Cowlishaw <tim at timcowlishaw.co.uk> wrote:
> Hmm... thinking about it, wouldn't after_create do the job?

I think there's an interesting point to be made here about avoiding
dependence on the Rails "magic" where it's not really necessary.

Certainly, if you *always* need a object to have certain defaults,
then you can start looking into overriding initialize or using the
callbacks. But in this case, do you really *always* want user objects
to be created in this way? Really?

If your model needs specific creation behaviour, putting that code in
a callback makes it less clear what your intentions are, particularly
when you are creating these instances in a controller.

With the magic:

  class ThingController < ActionController::Base
    def create
      @thing = Thing.new(params[:thing]) # something *magical* goes on in here
      if @thing.save
        # etc...

But is that really better than:

  class ThingController < ActionController::Base
    def create
       @thing = Thing.new_with_defaults(params[:thing])
       if @thing.save
         # etc...

IMHO, the second is not only clearer, but it's going to make it much
simpler to test, debug, and understand later down the line.

* J *

More information about the Chat mailing list