2016-09-28 10 views
0

私は、ユーザーが人間であるかどうかをチェックするHumanizer gemでRails 4を使用しています。 これまでのところとても良いです。しかし今、ある特定のフォームで、フォームを送信する前に、ユーザーが人間かどうかを確認する必要があります。Humanizer gem human validation Rails 4 with Ajax、Jquery

これまでのところ私はグーグルではありましたが、そのようなことをするための情報源やアイデアは見つかりませんでした。答えを入力した後、すべてのデータが、その答えが正しいかどうかをチェックするためにコントローラに送信されるように、HUMANIZER解答欄に反応し

作成した関数:

私はこれらの事を行っています。

チェックのために私が送信しているデータは、ヒューマナイザ質問、ヒューマナイザー質問ID、ヒューマナイア回答です。

マイ形式:

<%= form_for(@advertisement,:html => {:id=>"new_advertisement","data-parsley-validate" => true,:multipart => true}) do |f| %> 


    <%= f.label :humanizer_answer, @advertisement.humanizer_question %>  
    <%= f.hidden_field :humanizer_question_id ,:id=> "humanizer_question_id"%> 
    <%= f.hidden_field :humanizer_question , :value=>@advertisement.humanizer_question, :id=> "humanizer_question"%>     
    <%= f.text_field :humanizer_answer, :'data-validate_humanizer' => '/blocked/checkhumanizer',:'data-parsley-conditionalrequired'=>'["[name=\"paid\"]:checked", "false"]',:'data-parsley-validate-if-empty data-parsley-success-class' =>""%> 

<button type="submit" class="blue-button btn btn-default" style="width:380px !important;"><%= t('add') %></button> 

スクリプト:

$('[data-validate_humanizer]').blur(function() { 
     $this = $(this); 
     $.get($this.data('validate_humanizer'), { 
      question_id: $('#humanizer_question_id').val(), 
      question: $('#humanizer_question').val(), 
      answer: $(this).val() 

     }).success(function() { 

      alert("sucess"); 

     }).error(function() { 

      alert("Error"); 

     }); 
}); 

コントローラー:

def checkhumanizer 
     if params[:question_id].present? && params[:question].present? && params[:answer].present? 

      render :nothing => true, :status => 200 
     else 
      render :nothing => true, :status => 404 
     end 

    end 

ルート:

resources :blocked do 
     collection do 
      get 'checkhumanizer' 
     end 
end 

は:これまでのところ私は私が私が開始する単一のアイデアを持っていないvalidation.Butをする必要がある必要があるすべてのものを持っています。

解決策:すべての質問と回答があるヒューマナイザーロケールにアクセスできますか?それは良いアプローチか悪いのですか?

ありがとうございました!

答えて

1

あなたのモデル

def checkhumanizer 
    if params[:question_id].present? && params[:answer].present? 

    ad = Advertisement.new 
    ad.humanizer_question_id = params[:question_id] 
    ad.humanizer_answer = params[:answer] 

    if ad.humanizer_correct_answer? 
     render :nothing => true, :status => 200 
    else 
     render :nothing => true, :status => 404 
    end 

    else 
    render :nothing => true, :status => 404 
    end 

end 
+0

サンドロdのHUMANIZERメソッドを使用して、これを試すことができます。ありがとう、完璧に動作します。 – Edgars