On 16 Jan 2009, at 15:02, Vikrant wrote:

>
> I have a model Model1 with the before_destory() method defined as
> below.
>
> def before_destroy
> self.status = 'deleted'
> self.save!
> return false #don't want to delete the row.
> end
>
> But in the database the change in the status column doesn't get
> changed to 'deleted'
>
> I then tried this
>
> def before_destory
> self.status = 'deleted'
> self.save!
> n = Model1.find self.id    #Set the breakpoint here in NetBeans IDE.
> return false
> end

Have you tried looking at development log to see exactly what queries  
run  ?

Fred

>
>
> I then checked the value of n.status and it was 'deleted', but in the
> database it was still 'active' (the other value).
>
> I also tried this
>
> Controller1 < ApplicationController
> def action1
>  m = Model1.find params[:id]
>  m.destroy
>  n = Model1.find m.id #Set the breakpoint here
> end
> end
>
> Even here the value of n.status was 'deleted', but in the database it
> was the previous value. (Showed this example just to show that even in
> controller I'm getting the same).
>
> After a bit of of looking through Rails API, I found out that model
> callbacks like before_destroy are transactional. so they get rolled
> back if any error raised. So I tried this.
>
> def before_destroy
> self.status = 'deleted'
> self.save!
> raise self.errors.inspect
> return false
> end
>
> The above code made sure that there are no errors attached, so
> self.save! should run fine (or at least it should raise error!).
> So I don't know now, why my changes are not being written to the
> database. Is it because I'm returning false from the before_destroy()
> method? If yes, then how can I save the changes made in before_destroy
> () callback and also the row doesn't get deleted?
>
> I'm using SQLite and I've also noticed that a 'development-journal'
> file get created, while I've paused the code somewhere in between the
> before_destroy() method. (That may be the transaction thing, I guess.)
>
> I'm using -
> Rails 2.2.2
> SQLite 3.5.9
> Ubuntu 8.10 (Intrepid) x64
>
> >


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

Reply via email to