2011-01-05 16 views
0

現在、AJAXを使用して特定のユーザ名を検索するrailsウェブページに観測フィールドがあります。しかし、エスケープシーケンスを正しく取得するのに問題があります。ここ はRailsのコードです:Rails Observe Fieldエスケープシーケンシング

%= observe_field "new_member_search", 
     :url => {:controller => :user, :action => :search}, 
     :frequency => 0.5, 
     :update => 'ProjectMemberNew', 
     :with => :username 
    %> 

、ここでは、コントローラ

def search #search for user, use in 'Project Add Member' 
name = params['username'] 
limit = params['limit'] || 21 
users = unless name.blank? 
    User.find_by_sql(
    ["select id,icon,login,realname,email from users where 
         #{User.verified_users} and login like ? limit ?","%#{name}%" ,limit]) 
else 
    [] 
end 
render(:partial => 'search_hit_member', 
    :locals => {:users => users}, 
    :layout => false) 

終わりです

これは、次のJavaScript

それが動作しないことを非常に奇妙な
<script type="text/javascript"> 
//<![CDATA[ 
jQuery('#new_member_search').delayedObserver(0.5, function(element, value) {jQuery.ajax({data:'username=' + value, success:function(request){jQuery('#ProjectMemberNew').html(request);}, type:'post', url:'/of/user/search'})}) 
//]]> 
</script> 

を生成します。私はプロトタイプからJQUERYに切り替えました。

おかげで、

+0

'User.find_by_sql'コードは危険であり、SQLインジェクションを受けやすいです:http://wiki.rubyonrails.org/howtos/security/sql_injection – Zabba

+0

アドバイスありがとうございます。私はテクニカルチームに通知して、作業を開始します... – TheRealVayne

答えて

0

は、エスケープシーケンス問題ではなかったことが判明します。最初にjqueryを初期化してから、jquery-uiとjreilsを初期化しなければなりませんでした。その順序でない場合、delayedObserverは初期化されません。確かに奇妙です。 https://github.com/aaronchi/jrails/issues#issue/6