On Sep 26, 2011, at 4:23 PM, Jim Harvey wrote:

> I have the following in user.rb:
> 
> lifecycle do
>   state :active, :default => true
>   state :inactive
>   state :invited
> 
>   ... some custom creators and transitions ...
> end
> 
[snip - default question already answered]

> Also, I'd like to have a checkbox input on the "new user" form that sets the 
> state to active or inactive (along with taking some other actions) depending 
> on whether the box is checked. I was trying to use a before_filter on the 
> create action to set the state, etc. but I'm not sure how to access the User. 
> For example, @user is nil. My current understanding is that a new User is 
> instantiated with the state already set when the "new form" is loaded.

I suspect the lifecycle creators are probably not the best path for this, since 
you really only want one form. The standard vanilla-Rails way to do this is 
with attr_accessor for the checkbox (in user.rb):

attr_accessor :send_activation, :type => :boolean

You'll need to add the field to your field-list on the 'new' page, but given 
that it's customized that shouldn't be an issue.

Then, in a model callback (again in user.rb), do something like:

before_validation :set_user_state, :on => :create

def set_user_state
  self.state = 'inactive' if send_activation
end

This will override the default state as needed. I used before_validation 
because it's frequently the case that some user validations might be checking 
it, and setting it in before_create or before_save will be too late.

Then, to actually handle sending the email, use an after_create callback (or an 
observer) to fire off the activation email.

--Matt Jones

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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/hobousers?hl=en.

Reply via email to