I'm making a web app with Sinatra and Sequel. My web app may have many
simultaneous users modifying the DB at once. Each user has a unique id
associated. One of my models records changes in a separate log table,
associated with the user who made the change. For example:
class Bug < Sequel::Model
def tag_names=( desired_tags )
# add/remove tags from a join table as necessary
BugLogEntry << {
:created_on => Time.now,
:bug_id => id,
:user_id => active_user_id,
:field_id => BugLogField::TAG_NAMES,
:new_value => tag_change_summary
}
end
def after_create
BUG_FIELDS.each do |field|
BugLogEntry << {
:created_on => Time.now,
:bug_id => id,
:user_id => active_user_id,
:field_id => BugLogField.const_get(field.upcase),
:new_value => self.send(field).to_s
}
end
end
def before_save
if old_bug = Bug[id]
BUG_FIELDS.each do |field|
new_value = self.send( field )
old_value = old_bug.send( field )
if new_value != old_value
BugLogEntry << {
:created_on => Time.now,
:bug_id => id,
:user_id => active_user_id,
:field_id => BugLogField.const_get(field.upcase),
:new_value => new_value,
:old_value => old_value
}
end
end
end
end
My question is: how should I record or access the active_user_id in a
thread-safe manner? My only guess thus far has been something like
this:
class Bug < Sequel::Model
attr_accessor :active_user_id
end
...
# Record who touched this instance before making any changes
my_bug.active_user_id = session[:user_id]
my_bug.tag_names = "foo bar"
my_bug.name = "Updated for hotness"
my_bug.save
My question (finally) is: will the above work? Does each user always
get a new instance of a model (even for the same record)? And to be
sure, both after_create and before_save have full access to instance
variables on the model, right? (Nothing has been cleared and reloaded?)
--
You received this message because you are subscribed to the Google Groups
"sequel-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/sequel-talk?hl=en.