У меня есть небольшой кусочек кода, который позволяет пользователям вводить обзор. Если он уже написан, отображается текущий обзор со ссылкой для его редактирования.
<div id="text_area">
<% if @user_rating.review.blank? %>
<%= render :partial => "reviews/text_area" %>
<% else %>
<%= simple_format @user_rating.review %>
<%= link_to_function "Edit Review" do |page|
page.replace_html :text_area, :partial => "reviews/text_area"
end %>
<% end %>
</div>
Это работает правильно, КРОМЕ, если обзор содержит символ двойной кавычки. Вот вывод HTML, который он генерирует после того, как пользователь уже написал отзыв (блок else сверху).
<div id="text_area">
<p>some text with "quotation marks"</p>
<a href="#" onclick="try {
Element.update("text_area", "<form action=\"/pages/iphone-reviews/reviews/new/write\" class=\"edit_rating\" id=\"edit_rating_16\" method=\"post\"><div style=\"margin:0;padding:0\"><input name=\"_method\" type=\"hidden\" value=\"put\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"fSZK30kpWEUtCxOvr4xDF1O+puDiPm87mhaxaLirIT8=\" /></div>\n <textarea cols=\"40\" id=\"rating_review\" name=\"rating[review]\" rows=\"20\" style=\"width:100%;height:150px;\">some text with "quotation marks"</textarea>\n</form>");
} catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"text_area\", \"<form action=\\\"/pages/iphone-reviews/reviews/new/write\\\" class=\\\"edit_rating\\\" id=\\\"edit_rating_16\\\" method=\\\"post\\\"><div style=\\\"margin:0;padding:0\\\"><input name=\\\"_method\\\" type=\\\"hidden\\\" value=\\\"put\\\" /><input name=\\\"authenticity_token\\\" type=\\\"hidden\\\" value=\\\"fSZK30kpWEUtCxOvr4xDF1O+puDiPm87mhaxaLirIT8=\\\" /></div>\\n <textarea cols=\\\"40\\\" id=\\\"rating_review\\\" name=\\\"rating[review]\\\" rows=\\\"20\\\" style=\\\"width:100%;height:150px;\\\">some text with "quotation marks"</textarea>\\n</form>\");'); throw e }; return false;">Edit Review</a>
</div>
Этот пример разбивается, потому что текст обзора содержит двойные кавычки. Он работает с одинарными кавычками и любым другим текстом, который я могу придумать. Я думаю, что rails неправильно избегает двойных кавычек в javascript.
Ошибка, возникающая в Firebug, такова:
отсутствует) после списка аргументов
[Прервать эту ошибку] \ "id = \" rating_review \ "name = \" rating [re ... n: right; \ "> \ n
Я не знаю, как это исправить. Спасибо!