注册后自动创建用户

时间:2017-10-12 01:52:54

标签: ruby-on-rails devise

我有一个使用Devise的简单应用程序。 如何在注册时自动创建用户并将其分配给新客户端?

我有一个客户表和联盟表,他们都需要一个用户,所以我创建了一个用户表,客户和联盟会员属于用户。

这个想法是,在用户注册后,它会使用给出的电子邮件创建客户端和用户,以及客户端将在其电子邮件中收到的自动生成的密码。当他们登录时,系统会提示他们更改密码。

我有一个登录页面供客户注册,他们输入信息并点击sign_up。我想要的是为该客户自动生成一个用户,以便他们下次访问时可以登录。

这是我到目前为止所尝试的:

clients_controller.rb

   def create
    @client = Client.new(client_params)
    @user = User.new(user_params[password: random_password, password_confirmation: random_password])

    respond_to do |format|
      if @client.save && @user.save
        format.html { redirect_to @client, notice: 'Client was successfully created.' }
        format.json { render :show, status: :created, location: @client }
      else
        format.html { render :new }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end


   private

    def set_client
      @client = Client.find(params[:id])
    end

    def client_params
      params.require(:client).permit(:first_name, :last_name, :cellphone, :email, :affiliate_id, :user_id)
    end

  def user_params
    params.require(:client).permit(:email)
  end

  def random_password
    [*('a'..'z'),*('0'..'9')].shuffle[0,8].join
  end

1 个答案:

答案 0 :(得分:1)

尝试改变 @user = User.new(user_params[password: random_password, password_confirmation: random_password])

user_parameter = user_params.merge(password: random_password, password_confirmation: random_password)

@user = User.create!(user_parameter)