[Nitro] Discussion about setting relationships with unsaved objects

Rob Pitt rob at motionpath.com
Wed Feb 22 05:23:24 EST 2006

Currently in Og if you try and assign has many or joins many
relationships to an unsaved object, the object is silently saved in the
background (this is needed to make the relationship work), but if you do
the same with refers_to/belongs_to/has_one, this does not happen,
instead Og proceeds as if everything is fine essentially ignoring your
request (and losing the relationship).

I think all of these behaviours are wrong because you may not expect
your object to have been saved in the has_many/joins_many case and you
will not know why your code mysteriously breaks in the belongs_to case
(this actually bit me while writing a unit test the other day and it
took me a good five minutes to work out what was wrong).

I believe that all of these cases should throw and exception as you
should not be trying to assign relationships to unsaved objects, but
before I make this happen I want to confirm with the list you agree this
is the appropriate course of action. This way informs you that your code
is broken and if you did want automatic saving all you'd need to do is:

  obj.relation = remote
rescue UnsavedException

Of course, this is pretty silly since you should be doing:

obj.relation = remote

In your code anyway.

At the very least, the refers_to/has_one/belongs_to relationships should
have the same behaviour as the other relationships, be that auto-saving
as they currently do, or as I believe, throwing exceptions.


More information about the Nitro-general mailing list