Overriding Devise Registration Create Method

后端 未结 3 1945
情歌与酒
情歌与酒 2020-12-31 04:47

I want to specifically set a field when a user is created. I have

class RegistrationsController < Devise::RegistrationsController
  def create
    super
          


        
相关标签:
3条回答
  • 2020-12-31 05:19

    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
    
    0 讨论(0)
  • 2020-12-31 05:32

    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
    
    0 讨论(0)
  • 2020-12-31 05:34

    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
    
    0 讨论(0)
提交回复
热议问题