2017-10-12 126 views
0

我有一个简单的应用程序使用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

试图改变 @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) 
+0

谢谢,伙计。我认为随机密码每次被调用时都会生成,所以它不匹配。所以,我创建了一个变量来存储它,然后叫变量,而不是: 高清user_parameter RANDOM_NUMBER = random_password user_params.merge(密码:RANDOM_NUMBER,password_confirmation:RANDOM_NUMBER) 结束 – Allan

+0

的我怎么能收集用户ID和保存任何想法它在客户端下的user_id? – Allan

+0

我使用@ client.update_columns(user_id:@ user.id)并在保存时调用它。 – Allan