You might want to try save! (save without validations) in your after save
hook.

-- Yehuda

2009/2/24 Mike Stenhouse <[email protected]>

>
> Hi all
>
> I've been playing with DataMapper in Merb and Sinatra and I've got a
> question... Is there any equivalent to the ActiveRecord's after_add
> hook? I want to update a property on an object when something is added
> to its "has, n" collection.
>
> Slightly simplified models:
>
> class Story
>  include DataMapper::Resource
>
>  property :id,         Serial
>  property :finished,   Boolean,    :default => false
>
>  has 1..4, :parts
> end
>
> class Part
>  include DataMapper::Resource
>
>  property :id,         Serial
>  belongs_to :story
> end
>
> When a Story has 4 Parts it is finished and I want to mark it as such.
> I've tried adding after :save to Story but that doesn't seem to get
> called when a Part is added. I've tried adding after :save to Part, to
> check whether it is the 4th Part of its parent Story but while that
> gets called, it's been problematic. Here's what I've tried in the Part
> model:
>
> after :save do
>  if story.parts.count == 4
>    story.finished = true
>    story.save
>  end
> end
>
> Doesn't seem to change the story.
>
> after :save do
>  if story.parts.count == 4
>    s = Story.get(story.id)
>    s.finished = true
>    s.save
>  end
> end
>
> Produces a "stack level too deep" trace.
>
> after :save do
>  if story.parts.count == 4
>    story.attribute_set(:finished, true)
>  end
> end
>
> Doesn't seem to change the story.
>
> What am I doing wrong? Or is there another way around?
>
> Any help much appreciated...
>
> Mike
> >
>


-- 
Yehuda Katz
Developer | Engine Yard
(ph) 718.877.1325

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to