2011-12-29 3 views
4

jqueryとajaxでレールを使用して、ユーザ名の有効性をチェックしています。私は jquery検証の目的のために次のプラグインを使用しています。私のコントローラでレールで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

+1

あなたは同様の問題を持つ誰かが参照できるように、答えを追加して後でそれを受け入れるべきです。 –

+2

これは 'rails check username ajax'のGoogle検索結果のトップです。あなたは答えを加えるべきです。 –

答えて

6

私は答えを加えています。遅延の人には申し訳ありません。

プラグインへの最初のクレジット:https://github.com/posabsolute/jQuery-Validation-Engine。 アプリケーションの検証にプラグインを使用しました。routes.rbをで

<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> 

私は次のルートを持っている:

はビューでは、私は、Javaスクリプトで、同じビューで

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

を持っていました。私は以下のいるjquery.validationEngine-en.jsファイルで

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

"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'に別のファイルを使用することは可能ですか?私はファイル 'jquery.validationEngine-en.js'にアクセスすることができないので、Railsを使用していてパイプラインです。ありがとう –

+0

あなたはAI Dをどういう意味ですか、ファイルをダウンロードしてベンダーファイルに置くことができます(それを忘れないでください)。 –

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

route.rbファイルを使用するルートと一致するように設定していることを確認してください。コールのデフォルトのアクションは、GET HTTPリクエストです。

次は、入力値が前のデータベースに照会消毒することができるように(私はアプリケーションコントローラでヘルパーを含め、要求を処理するために、あなたのコントローラーで適切なアクションを設定:REQUEST

取り扱い

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と入力値を渡します。

以下を追加し、このヘルパーにアクセスするには:

アプリケーションCONTROLLERフォーム自体に今

def help 
    Helper.instance 
    end 

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

、あなたの入力は、次のように読んでください:適切な機能を1として

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

を最後の検証として常にAJAX呼び出しを配置し​​ます。

ドキュメントの先頭にjquery.js、jquery.validationEngine.js、jquery.validationEngine.js、validationEngine.jquery.cssを[jsの順番で含める]ことを忘れないでください。

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

これをユーザー名に使用する場合は、上記を適切に編集してください。

関連する問題