Rails:设计自定义创建注册

时间:2014-04-28 20:28:24

标签: ruby-on-rails devise

我在设计中有自定义注册,但它没有做我应该做的事。

我正在尝试创建新数据:

  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"}}

1 个答案:

答案 0 :(得分:2)

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记录。当您调用create方法时,方法respond_with会返回。 在调用if之前执行respond_with语句可以解决您的问题。

<强>更新

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

validates :custom_url, uniqueness: true, on: :update
相关问题