Humanizer gem Human Validation Rails 4 с помощью Ajax, Jquery
Я использую Rails 4 с гемом Humanizer, который проверяет, является ли пользователь человеком. Все идет нормально. Но теперь в одной конкретной форме мне нужно проверить, является ли пользователь человеком, прежде чем разрешить отправлять форму.
До сих пор я гуглил, но не нашел источника или идеи, чтобы сделать такую вещь.
Я сделал эти вещи:
Создана функция, которая реагирует на поле ответа гуманизатора, поэтому после ввода ответа все данные отправляются в контроллер для проверки правильности этого ответа.
Данные, которые я отправляю контроллеру для проверки: гуманизаторский вопрос, идентификатор гуманизатора, гуманизаторский ответ.
Моя форма:
<%= 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
Примечание. Пока у меня есть все, что мне нужно для проверки. Но у меня нет ни одной идеи, с которой можно начать.
Возможное решение: возможно ли получить доступ к локациям Humanizer, где находятся все вопросы и ответы? Это хороший подход или плохой?
Благодарю вас!
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