2011-12-29 76 views
4

我正在使用jquery和ajax來檢查用戶名的可用性。我正在使用 下面的插件jQuery驗證的目的。在rails中使用jquery和Ajax檢查用戶可用性

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 

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

+0

我回答我的問題。我有它正在工作.. – Kumar 2011-12-29 19:50:05

+1

您應該添加答案並稍後接受,以便有類似問題的其他人可以參考。 – 2011-12-30 08:07:51

+2

這是'rails check username ajax'的谷歌搜索結果。你應該添加你的答案。 – 2012-01-07 05:30:04

回答

6

我在添加答案。對不起,延遲的傢伙。

對插件的首要功勞: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 
+0

偉大的文章,現在試圖遵循它。我有一個(可能是愚蠢的)問題。是否可以使用另一個文件作爲'ajaxUserCall'?我使用Rails和它的管道,所以我不能訪問文件'jquery.validationEngine-en.js'。謝謝 – 2015-04-25 12:58:53

+0

你是什麼意思AI D,你可以下載這個文件並把它放在你的供應商文件中(不要忘記需要它)。 – 2016-01-28 21:08:53

2

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

使用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請求。

接着設置適當的動作在控制器來處理該請求(I包括在應用控制器的輔助,使得輸入值可以被消毒之前查詢在數據庫中:

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 

如果您不能確定正確的輸入ID的,看在通話過程中傳遞的參數的服務器日誌,並做了簡單的複製粘貼。默認情況下,請求將輸入ID和輸入值。

要訪問這個幫助增加以下內容:

應用控制器

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,並調用

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

如果您想爲用戶名執行此操作,請恰當地編輯上述內容。