Проверьте доступность имени пользователя, используя jquery и Ajax в rails - PullRequest
4 голосов
/ 29 декабря 2011

Я использую рельсы с jquery и ajax для проверки доступности имени пользователя.Я использую следующий плагин для проверки jquery.

https://github.com/posabsolute/jQuery-Validation-Engine

В моем контроллере я использую следующий метод для проверки доступности имени пользователя.Это правильный способ написания метода?Я проверил многие сообщения о доступности имени пользователя на этом форуме, но ничего не получилось.

Ответы [ 2 ]

6 голосов
/ 18 декабря 2013

Я добавляю ответ.Извините за задержку, ребята.

Первый кредит плагину: https://github.com/posabsolute/jQuery-Validation-Engine.Использовал плагин для проверок в приложении.

В представлении у меня было

<%= f.username_field :username, :id => 'free-user', :placeholder=>'User Name', :class => "validate[required, ajax[ajaxUserCall]]", "data-prompt-position" => "topLeft:0,9"%>

В том же виде, в сценарии Java:

<script type="text/javascript">
 $(document).ready(function(){
  $("#free-user").bind("jqv.field.result", function(event, field, errorFound, prompText){
    if(errorFound){
        $(".continue").attr("disabled", false);  // .continue is a button
    } else{
        $(".continue").attr("disabled", true);
    }
  })
 });
</script>

В маршрутах.rb У меня есть следующий маршрут.

match '/check-user' =>"users#check_user"  // creating route for ajax call

В файле jquery.validationEngine-en.js у меня есть следующее:

"ajaxUserCall": {
                "url": "/check-user",
                // you may want to pass extra data on the ajax call
                "alertText": "* This user is already taken",
                "alertTextLoad": "* Validating, please wait"
            },

В контроллере пользователей у меня есть следующий метод

def check_user
  user = params[:fieldValue]
  user = User.where("username = ?", username).first
  if user.present?
    render :json =>  ["free-user", false , "This User is already taken"]
  else
    render :json =>  ["free-user", true , ""]
  end
end
2 голосов
/ 30 августа 2012

Чтобы проверить имя пользователя / доступность электронной почты, выполните следующие действия:

Используя https://github.com/posabsolute/jQuery-Validation-Engine

, отредактируйте файл validationsEngines-en.js для вызовов AJAX, один для электронной почты будет выглядетьнапример:

            "ajaxEmailAvailable": {
                "url": "/route_to_send_the_parameters",
                // you may want to pass extra data on the ajax call
                "alertTextOk": "* This email is available",
                "alertText": "* This email is already taken",
                "alertTextLoad": "* Validating, please wait"
            },   

Убедитесь, что вы сконфигурировали свой файл rout.rb в соответствии с маршрутом, который вы хотите использовать, действие по умолчанию с вызовом - запрос GET HTTP.

Далеенастроить соответствующее действие в вашем контроллере для обработки запроса (я включил помощника в Application Controller, чтобы входное значение могло быть обработано перед запросом в базе данных:

КОНТРОЛЛЕР, ОБРАЩАЮЩИЙСЯ К ЗАПРОСУ

  def username_availability
     scrubb = help.sanitize(params[:fieldValue], :tags => '')
     user = User.find_by_email(scrubb)
        if user.blank?
            render :json =>  ["INPUT_ID", true , ""]
        else
            render :json =>  ["INPUT_ID", false , "This email is already taken"]
        end
   end

Если вы не уверены в правильности идентификатора INPUT, посмотрите в журналах сервера параметры, переданные во время вызова, и выполните простую операцию копирования-вставки. По умолчанию запрос передает идентификатор INPUT и значение INPUT.

Чтобы получить доступ к этому помощнику, добавьте следующее:

КОНТРОЛЛЕР ПРИЛОЖЕНИЯ

  def help
    Helper.instance
  end

  class Helper
    include Singleton
    include ActionView::Helpers::TextHelper
  end

Теперь на самой форме ваш ввод должен выглядеть какследующее:

<%= c.text_field :email, "data-validation-engine"=>"validate[required, custom[email], ajax[ajaxEmailAvailable]]" %>

В соответствии с соответствующей функциональностью всегда ставьте вызов AJAX в качестве последней проверки.

Не забудьте включить jquery.js, jquery.validationEngine-en.js,jquery.validationEngine.js и validationEngine.jquery.css в заголовке документа [в таком порядке js] и для вызова

<script type="text/javascript">$(function() {$("#FORM_ID").validationEngine();});</script>

Если вы хотите сделать это для имени пользователя, просто отредактируйте вышенадлежащим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...