두 부분으로 코드를 분할하면 이해하기가 더 쉽습니다.
첫 번째 부분 $("#reviews").append("<%= ... %>");
은 erb가있는 javascript입니다. 즉, <%= ... %>
은 그 안에있는 루비 코드가 무엇이든 반환됩니다. 그 대체 결과는 유효한 자바 스크립트 여야하며, 그렇지 않으면 클라이언트가 처리하려고 시도 할 때 오류가 발생합니다. 그래서 이것이 첫 번째 것입니다 : 유효한 자바 스크립트이 필요합니다.
루비가 생성하는 것은 이중 따옴표가있는 자바 스크립트 문자열 안에 포함되어야합니다. <%= ... %>
주위에는 큰 따옴표가 있어야합니다. 이렇게 생성 된 자바 스크립트는 다음과 같이된다는 것을 의미합니다 :
$("#reviews").append("...");
지금의이
<%= ... %>
내부의 루비 부분을 살펴 보자.
render(:partial => @review)
은 무엇을합니까? 그것은 부분적인 렌더링입니다. 즉, 어떤 종류의 코드 (html, css ... 또는 더 많은 자바 스크립트)를 렌더링 할 수 있다는 것을 의미합니다!
그래서 부분에 간단한 html이 있으면 어떻게 될까요?
<a href="/mycontroller/myaction">Action!</a>
자바 스크립트가 큰 따옴표로 묶인 문자열을 매개 변수로 사용하고 있다는 것을 기억하십니까? <%= ... %>
을 해당 부분 코드로 바꾸면 문제가 발생합니다. href=
바로 뒤에 큰 따옴표가 있습니다!자바 스크립트가 유효하지 않습니다
이 위해서는
// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");
이 발생하지 않도록, 당신의 문자열이 절단되지 않도록 당신이 탈출 이러한 특수 문자를 원하는 -이 대신 생성 뭔가가 필요합니다
<a href=\"/mycontroller/myaction\">Action!</a>
을
이것은 무엇입니까 escape_javascript
않습니다. 그것은 반환 된 문자열이 "break"javascript가되지 않도록합니다. 당신이 그것을 사용하면 원하는 출력을 얻을 것이다 :
$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")
감사합니다!
참고로 대답은 정답이 아닙니다. Kikito는 – Steve