繁体   English   中英

Rails:设计自定义创建注册

[英]Rails: Devise custom create registration

我有一个自定义注册设计,但它没有做我应该做的。

我正在尝试创建新数据:

  def create
    build_resource(sign_up_params)

    if resource.save

      yield resource if block_given?
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_flashing_format?
        sign_up(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
        if params[:user][:role] == "Proof"
          Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
        end
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
        expire_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
  end

这个部分的定制是什么:

    if params[:user][:role] == "Proof"
      Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
    end

但由于某种原因,它没有做到它应该做的事情。 注册后,它不会在我的数据库中创建新数据。 这是错误的位置吗?

  Parameters: {"utf8"=>"✓",
              "authenticity_token"=>"3QTVW3x3cnWho5yd6aEMC31iDIDu+IHQClpQao9VBqc=", 
              "user"=>{"first_name"=>"First", 
                       "last_name"=>"Last", 
                       "role"=>"Proof"}}

create动作中,交换

   respond_with resource, :location => after_sign_up_path_for(resource)
    if params[:user][:role] == "Proof"
      Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
    end

    if params[:user][:role] == "Proof"
      Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
    end
   respond_with resource, :location => after_sign_up_path_for(resource)

目前,没有创建Proof记录,因为if语句中的代码是死代码并且从不执​​行。 调用respond_with方法时,方法create返回。 respond_with调用之前执行if语句应解决您的问题。

UPDATE

根据与OP的聊天会话,由于对custom_url字段进行了验证,因此未创建Proof记录。 建议使用on: :update选项更改验证。

validates :custom_url, uniqueness: true, on: :update

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM