簡體   English   中英

使用rails中的jquery和Ajax檢查用戶名可用性

[英]Check username availability using jquery and Ajax in rails

我正在使用帶有jquery和ajax的rails來檢查用戶名的可用性。 我使用以下插件進行jquery驗證。

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

在我的控制器中,我使用以下方法檢查用戶名可用性。

def check_name
 name = params[:name]
 if name.strip == ""
  render :json => { :available => false } 
  return
 end
 user = User.find(:first, :conditions => [ "name = ?", name])
 if user
  render :json =>  ["name", false , "This name is already taken"]
 else
  render :json =>  ["name", true , ""]
 end
end

這是編寫方法的正確方法嗎? 我檢查了這個論壇中的許多用戶名可用性帖子,但沒有任何結果。

我正在補充答案。 對不起,遲到的家伙們。

首先歸功於插件: 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>

在routes.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

要檢查用戶名/電子郵件可用性,請執行以下操作:

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

編輯AJAX調用的validationsEngines-en.js文件,電子郵件的一個文件如下所示:

            "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"
            },   

確保配置routes.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 ID,請在服務器日志中查看呼叫期間傳遞的參數,並進行簡單的復制粘貼。 默認情況下,請求傳遞INPUT ID和INPUT VALUE。

要訪問此幫助程序,請添加以下內容:

應用控制器

  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調用作為最后一次驗證。

不要忘記在文檔的頭部[以js的順序]中包含jquery.js,jquery.validationEngine-en.js,jquery.validationEngine.js和validationEngine.jquery.css並調用a

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

如果您想對用戶名執行此操作,只需適當地編輯上述內容即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM