设计,空白password_confirmation

时间:2014-01-05 19:27:40

标签: ruby-on-rails devise xmlhttprequest

需要用devise进行ajax side-registration。创建了RegistrationsController:

class RegistrationsController < Devise::RegistrationsController

  def create 
    if request.xhr?
      build_resource(sign_up_params)

      if resource.save
        ...
      end
    else
      super
    end
  end

end

注意,该模型不验证密码确认,如果我没有在XHR中传递该字段,或者该字段为空,并且Angular在执行$ http.post之前没有收集它

在Angular中破解了一段时间,硬编码初始$scope.reg = {'password_confirmation': ''}但是我想知道如何以正常方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

一旦你正确设置了Devise,你的模型的密码确认就不可能得到验证。如果注册实际创建了新用户,您肯定知道是否未运行验证。如果它没有创建新用户,那么验证工作正常。

问题似乎在于create行动。看起来您的if resource.save没有else块,这是resource.save因验证错误而失败时调用的块。您的create操作应如下所示:

  def create
    # seems unnecessary to check if request is xhr
    build_resource(sign_up_params)
    if resource.save
      render json: resource
    else
      render :json => { :errors => @model.errors.full_messages }, :status => 422
    end
  end

然后只需要Angular中的代码通过通知用户来处理错误。