Рассматриваемое приложение использует jQuery для выполнения запросов ajax для заполнения зависимых полей выбора. Мое действие контроллера responses_to: js, а в файле .js.erb у меня есть:
str += '<%= f.select field.name, list, {}, { :class => "list", :multiple => "multiple", :style => "size:8; width:100px;" } %>';
«список» заполняется так:
str += '<% list = @validation_model.lookup([field], @lookup) %>';
Я .append() добавляю это в div. в конце файла шаблона .js.erb. Однако, когда «список» содержит более одного значения, синтаксический анализ шаблона завершается ошибкой. Если он пуст или содержит только одно значение, синтаксический анализ выполнен успешно.
Это баг, с которым я столкнулся, или я что-то не так делаю? Обратите внимание, что это выглядит как ошибка синтаксического анализа, а не ошибка времени выполнения, поэтому я не смог точно определить, в чем проблема ни в Firebug, ни в Safari Dev.
ОБНОВЛЕНИЕ: Вот полный код файла .js.erb. Я заменил переменную «список» встроенной логикой для получения массива.
str = '<% fields_for :mapapps do |f| %>';
<% for tf in @tag.tag_fields.find(:all, :order => :sequence) %>
<% field = tf.parentfield %>
<% if [email protected]?(field) %>
$("#<%= field.name %>").remove();
<% else %>
<% next %>
<% end %>
str += '<div id="<%= field.name %>" class="floater">';
str += '<label for="mapapps_<%= field.name %>"><%= field.label %></label>';
str += '<%= f.select field.name, @validation_model.lookup([field], @lookup), {}, { :class => "list", :multiple => "multiple", :style => "size:8; width:100px;" } %>';
str += '</div>';
<% end %>
str += '<% end %>'
$("#mfrsdiv").append(str);