[Nitro] Discussion about setting relationships with unsaved objects

Aidan Rogers aidan at yoyo.org
Wed Feb 22 06:18:18 EST 2006


Makes sense to me.
---
http://www.infurious.com


On 22/02/2006, at 9:23 PM, Rob Pitt wrote:

> 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:
>
> begin
>   obj.relation = remote
> rescue UnsavedException
>   obj.save!
>   remote.save!
>   retry
> end
>
> Of course, this is pretty silly since you should be doing:
>
> remote.save!
> obj.relation = remote
> obj.save!
>
> 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.
>
> Comments?
>
> _______________________________________________
> Nitro-general mailing list
> Nitro-general at rubyforge.org
> http://rubyforge.org/mailman/listinfo/nitro-general
>




More information about the Nitro-general mailing list