Обновление:
Если вы посмотрите на код JavaScript, который я вставил в обновлении ниже, у меня есть одинарные кавычки вокруг переменной var.name. Я думаю, что просто следовал учебнику в этом. Оказывается, когда я переключаю их на двойные кавычки, все работает нормально. Вопрос: это стабильное решение? Или все-таки лучше реализовать хелпер
escape_javascript
?
У меня есть приложение Rails, где пользователи могут вводить значения для поля. Затем другие пользователи могут добавить это значение в свой профиль, выбрав его в раскрывающемся списке. Я использую помощник collection_select для отображения выпадающего списка. У меня есть немного javascript, связанный с этим выпадающим списком, который распознает родительский выбор, а затем отображает определенный дочерний выбор.
Проблема в том, что некоторые пользователи вводят значения, содержащие апостроф. Firebug говорит мне, что апостроф нарушает JavaScript. Когда я вручную удаляю все апострофы для тестирования, JavaScript прекрасно работает.
Ранее сегодня я задал вопрос об экранировании амперсандов в отображаемом HTML-тексте, и теперь я знаю, что вы используете <% = h%>. Из того, что я читал в Интернете, <% = h%> не избежать апострофа. Если я ошибаюсь и <% = h%> действительно избегает апострофов, то я не уверен, как реализовать это с collection_select, потому что я пробовал несколько комбинаций, и ни одна из них не работает.
Вот строка кода, создающая выпадающий список:
<%= season_form.collection_select :variety_id, Variety.find(:all), :id, :name, :prompt => "Optional: Variety" %>
Спасибо!
UPDATE
Вот мой JavaScript. У меня есть иерархия товаров. В качестве объяснения: этот JavaScript позволяет моему пользователю выбрать продукт из раскрывающегося списка, а затем автоматически ограничивает второе раскрывающееся меню только теми сортами, которые принадлежат любому продукту, выбранному пользователем. Это прекрасно работает, пока в названиях сортов нет апострофов.
Кроме того, я попытался добавить escape_javascript перед почти всеми элементами, но ни один из них не решил проблему. Документация по Rails для этого помощника не существует, поэтому здесь не так много примеров. Спасибо за вашу помощь!
var varieties = new Array();
<% for variety in @varieties -%>
varieties.push(new Array(<%= variety.product_id %>, '<%=h variety.name %>', <%= variety.id %>));
<% end -%>
function collectionSelected(e) {
product_id = e.getValue();
options = e.next(1).options;
options.length = 1;
varieties.each(function(variety) {
if (variety[0] == product_id) {
options[options.length] = new Option(variety[1], variety[2]);
}
});
}