2011-04-20 4 views
-1

내 레일 앱에 jQuery UI autocomplete plugin을 사용하고 싶습니다. 가능한 값의 수가 적어서 클라이언트 측에 저장하려고합니다.Rails 앱에서 jQuery UI 자동 완성 플러그인 사용

def index 
    @tags = Tag.find(:all).map { |t| t.name } 
end 

을 그리고 내보기 : 그래서 난 내 컨트롤러는 다음과 같이 설정이

var tags = <%= @tags %> 

문제는이 렌더링한다는 것입니다 같은 :

var tags = [&quot;tag1&quot;,&quot;tag2&quot;]; 

대신 :

var tags = ["tag1","tag2"] 

내가해야 할 일 내 태그 배열 안에있는 따옴표를 이스케이프하는 것을 다르게하기 위해서?

답변

0

0

무엇에 대해 :

var tags = <%=raw @tags %>; 

편집 :

보기에

@tags = Tag.find(:all).map(&:name).to_json 

컨트롤러에서 :

var tags = <%= @tags %>; 

그것은 당신이 제시하지만 것과 동일합니다 당신 그것이 틀림 없음을 확신한다. 그리고 확실히 (이스케이프 된) json (+ 쿼리가 향상되었습니다).

컨트롤러

@keys = @categories.map { |x| x.name } 
@autocomplete_categories = @keys.to_json.html_safe 

보기 예를 들면 다음과 같습니다 - 나는 여전히 XSS + 원료에 대해 의문을 제기하고있어

...

+0

그래도 작동하지만 XSS 취약점은 생성되지 않습니까? –

+0

방금 ​​내 대답을 편집했습니다 – apneadiving

+0

당신의 최신 답변을 시도하고 여전히 이스케이프 된 따옴표로 렌더링 ... –

-1

컨트롤러에서 누락 것은 html_safe입니다 :

<script type="text/javascript"> 
$(document).ready(function() { 
    var data = <%= @autocomplete_categories %>; 
    $("#auto").autocomplete({ source: data }); 
}); 
</script> 
+0

'원시'를 사용하는 것과 같은 효과가 있지만 XSS 공격에 열리지 않는지 궁금합니다. – apneadiving