I’ve been reading about ActiveRecord::Callbacks and they’re really
cool. But I have a complex need I’m not sure they answer.
Let’s say we have a User model. User has a #status attribute, which
can be either “active”, “closed” or “blocked”.
I want to set a callback to perform an action if an “active” User has
been blocked. So I need to know:
- That the user has at first been in “active” status.
- That his status has been set to “blocked”.
I need to set the callback when someone tries to save him in this
state, so to sum up:
I need to run some logic when someone updates a user.status from
‘active’ to ‘blocked’.
Any idea how?
–
Maurice B. Gladwell
On Jul 7, 2007, at 5:49 PM, Maurice G. wrote:
state, so to sum up:
I need to run some logic when someone updates a user.status from
‘active’ to ‘blocked’.
Any idea how?
–
Maurice B. Gladwell
Thinking completely off the top of my head (e.g., none of this has
actually been run), I’d say you could hook into the status writer and
set a flag for later use in a before_save callback.
before_save :handle_newly_blocked
def status=(new_status)
if self.status == ‘active’ && new_status == ‘blocked’
@newly_blocked = true
end
write_attribute(:status, new_status)
end
def handle_newly_blocked
if @newly_blocked
# … handle it …
end
end
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
Maurice G. wrote:
I’ve been reading about ActiveRecord::Callbacks and they’re really
cool. But I have a complex need I’m not sure they answer.
Let’s say we have a User model. User has a #status attribute, which
can be either “active”, “closed” or “blocked”.
I want to set a callback to perform an action if an “active” User has
been blocked. So I need to know:
- That the user has at first been in “active” status.
- That his status has been set to “blocked”.
I need to set the callback when someone tries to save him in this
state, so to sum up:
I need to run some logic when someone updates a user.status from
‘active’ to ‘blocked’.
Any idea how?
–
Maurice B. Gladwell
I don’t know how you are going to use this function,
but maybe you’re going to use it this way.
A user presses the “block” button.
this calls the “block!” method on the user,
execute whatever code you need.
Sorry for the late response, but I couldn’t resist telling you to look
at the acts_as_state_machine plugin. It lets you program transition
logic like you’re describing declaratively.
On 7/7/07, Maurice G. [email protected] wrote:
- That the user has at first been in “active” status.
–
Maurice B. Gladwell
–
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Pre-order my book The Rails Way
http://www.amazon.com/dp/0321445619
blog: Best Online Casino in Australia | Top Licensed Casinos for Gamblers
On 8-Jul-07, at 4:59 PM, Matthew R. wrote:
–
Maurice B. Gladwell
I don’t know how you are going to use this function,
but maybe you’re going to use it this way.
A user presses the “block” button.
this calls the “block!” method on the user,
execute whatever code you need.
Although your example is a simple state machine, I am a big fan of
acts_as_state_machine.
http://lunchroom.lunchboxsoftware.com/2006/1/21/acts-as-state-machine
Jodi