On Sun, Sep 5, 2010 at 5:44 PM, badnaam <[email protected]> wrote:
> In my app a user can set the status of a Post to different flags like > 'v' - visible, 'd' - mark for delete etc. > > These flags are set via controller actions. > > I have a batch process that runs and cleans all the posts marked for > delete. > > Post.find(:all, :conditions => ['status = ?', 'd']).each do |p| > p.destroy end > > This batch process runs every x many minutes. > > Let's say a user marks the post with 'd' => batch process runs at some > points => while the process is running the user marks the post as 'v'. > Now inside the batch process the record is already targeted for delete > and will be when the do loop is done, but the flag has changed via the > controller action. > > Ideally, if this happens I would like to not delete that post in the > batch process. > > What's the best way to handle this? Interesting. My first reaction is -- why a batch job? Why not just delete the thing when it's flagged and be done with it? :-) Second thought - how long does this batch job take? I would think it'd be so fast the chance of a status state conflict would be pretty small. But assuming you really need to do this: Have each status = 'd' assignment put the post id on a job queue and have your batch job use that instead of your AR find. When a post is set to status 'v', remove the post from the queue -- shouldn't be much overhead if you keep the queue in memory. FWIW, -- Hassan Schroeder ------------------------ [email protected] twitter: @hassan -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" 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/rubyonrails-talk?hl=en.

