0

jsonを使用して作成された独自の検証を作成しました-ユーザーの電子メールが一意でない場合、アクションは応答を送信します。アクションは次のとおりです。

def checkemail
 respond_to do |format|
  format.jsonr do
    if User.where(email: params[:email]).exists? 
      render :json => {
            :status  => :false,
            }.to_json
    else
      render :json => {
            :status  => :true,
            }.to_json
     end
    end
  end
end

2 番目のバリアント (使用方法がわからない)

   def checkemail
   render :nothing
    if User.where(email: params[:email]).exists? 
      return false
    else
      true
    end
  end

カスタム jQuery 検証メソッドを作成したいのですが、コードは次のとおりです。

   $.validator.addMethod("uniqueness", function(value) {
    $.getJSON('http://127.0.0.1:3000/checkemail.jsonr', { email: $('#email').val() }, function(data)  {
       return data.status
    });
}, 'Your email is not unique');
 .....
 "user[email]":{         //here is no error in name
    uniqueness: true
        },

また試した

そして、電子メールは一意ではないことを常に教えてくれます。

私は、カスタム検証メソッドで常に true を送信していると思います。

私のエラーはどこですか?

4

1 に答える 1

0

trueフォームの値が有効な場合、メソッドは返されます。あなたのメソッドは、 だけでなく、JSON オブジェクト全体を返していますdata->statustrueまた、メールが見つかった場合はcheckemail 関数が返されるため、メソッドは!data->statusこれを反転するために返される必要があります。最後に、メールが一意である場合、checkemail 関数はオブジェクトを返しません。elsereturn 句が必要です:status => false

カスタム メソッドの代わりに、組み込みのリモート検証を使用します。

"user[email]" {
  remote: {
    url: "http://127.0.0.1:3000/checkemail.jsonr",
    type: "get",
    data: {
      email: function() { return $("#email").val(); }
    }
  }
}

これは Ruby-on-Rails スクリプトであるべきだと思います (注: RoR をこれまでやったことがなく、グーグルで見つけた例に基づいているだけなので、構文が正しくない可能性があります):

def checkemail
 respond_to do |format|
  format.json do
    if User.where(email: params[:email]).exists? 
      render :json => false
    else
      render :json => true
    end
  end
end
于 2012-09-13T07:23:26.793 に答える