Hi,
I defined some hooks in Sequel::Model because I want them to be called for
all subclasses:
require 'time'
class Sequel::Model
def after_save
super
puts "IN AFTER_SAVE!"
ds = DB[:timestamp]
ds.where(true).update(:timestamp => Time.now)
end
def after_destroy
super
puts "IN AFTER_DESTROY!"
ds = DB[:timestamp]
ds.where(true).update(:timestamp => Time.now)
end
end
timestamp is a table with one column (timestamp, of type Date) and one row.
The idea is that when there is any write operation on the database (insert,
update, delete) that's done using a model, that this timestamp is updated
to the currrent time.
The problem is, the hooks are not being called in some cases. Here's an
example:
*Status*.where(:id=>*1*).update(:status=>*"*foobar4*"*)
The status table does get updated, but the timestamp table is not updated
by this and I don't see the output of the puts() call .
I can trigger the hooks if I do this:
y = *Status*.new(:status=>*"*hello*"*)
y.save
And also (subsequently) this:
y.status = *"*goodbye*"*
y.save
So it seems like Status.where(...).update(...) is not considered an
operation on a model, even though it starts by invoking the model name?
NB. I do have other hooks which are specific to particular models, but they
call super and none of those are involved in this example.
This is with sequel 4.9.0 and ruby 2.1.1 on Mac OS X 10.9.4.
Thanks,
Dan
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.