I want to specifically set a field when a user is created. I have
class RegistrationsController < Devise::RegistrationsController
def create
super
For future reference for anyone who finds this while searching for how to override devise methods, most of the Devise methods accept a block, so something like this should work as well:
class RegistrationsController < Devise::RegistrationsController
def create
super do
resource.tag_list = params[:tags]
resource.save
end
end
end
Instead of using super
to invoke the Devise::RegistrationsController's create action, replace it with the actual code of Devise::RegistrationsController's create method
build_resource
resource.tag_list = params[:tags] #******** here resource is user
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
If you don't want to rewrite the entire code of the create method, you can simply set the resource variable inside the protected method :build_resource of Devise::RegistrationsController, which is called before the resource is saved.
protected
# Called before resource.save
def build_resource(hash=nil)
super(hash)
resource.tag_list = params[:tags]
end