Tony Mann wrote: > My main point is this: programmers sometimes forget to check return > codes. If create() returns nil, then most likely the failure will be > noticed very quickly. I know this from personal experience, as both > myself and my colleague fell into this trap. > > Even if you don't agree with this argument, I find using new_record? > aesthetically displeasing. I would much rather check for nil. > > It comes down to a matter of semantics. The create() method is supposed > to return a saved object. It it fails in that mission, then it should > return nil. Asking for a saved object and getting an unsaved one is just > not expected behavior. > > ..tiny.. > > On Mon, Dec 15, 2008 at 8:24 AM, eltiare <[email protected] > <mailto:[email protected]>> wrote: > > > You are going to have to write extra code no matter what you do (for > instance, to catch an exception if you want it raised, or to check if > it returns nil). Rather than just doing this: > > if Foo.create() > #.... > end > > You can do this if you really want to check for it in one line > > if Foo.create().new_record? > #.... > end > > new_record? is only true if the model has not been saved to the > database yet. > > On Dec 13, 7:37 pm, "Tony Mann" <[email protected] > <mailto:[email protected]>> wrote: > > Dan, > > > > If a coder has reason to believe that saving a model will fail, > then they > > could use new() and then save(). Thus create() would be reserved > for those > > times when persistence failure is not part of the normal workflow. > > > > In its current form, create() does not provide a meaningful > shortcut over > > new and then save, since the return value has to be manually > checked. If > > create() returned nil on failure, then subsequent calls that > depend on the > > return value would inevitably fail. > > > > That is, this is good: > > > > foo = Foo.new > > > > if foo.save > > ... > > else > > end > > > > And this is good: > > > > bar.foo = Foo.create(...) > > bar.do_something > > > > But this is not good: > > > > bar.foo = Foo.create() > > > > if bar.foo.new_record? > > ... > > else > > ... > > end > > > > ..tony.. > > > > > >
If create returns nil, then how do you figure out why the save failed? Earle --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/datamapper?hl=en -~----------~----~----~----~------~----~------~--~---
