Appalling Farrago

A blog about stuff

Association Option: dependant
13 Jul 2013

So I’m working on some billing systems for a healthcare application and I just stumbled on some rails magic I didn’t even know was there. Both these options are methods for handling cases where you don’t want to delete associated records but need to handle the reference to a record that no longer exists.

I’m sure everyone is familiar with adding the following assoication:

class BillingReport < ActiveRecord::Base
  has_many :billing_items, dependent: :destroy
end

But I just discovered :restrict and :nullify which are awesome for a few rare associations you may need to accomidate for.

:restrict means that trying to destroy a record that has any assoications attached will throw a ActiveRecord::DeleteRestrictionError. This basically takes away the ability to delete records with child assoications. Great if you want the user to really think about what they are trying to do and if they’re sure this needs to be deleted should first handle the child records.

:nullify, which is what I need, will take all the billing_items and change their billing_report_id to null. This means that if a billing report is wrong (due to user error or something) it can safely be destroyed and all the billing_items will return to the unassigned state allowing future reports to handle them appropriately.