Неожиданная «ЛОГИКА» в шаблоне coffeescript - PullRequest
1 голос
/ 14 декабря 2011

Наличие этого кода в частичном представлении типа .js.coffee (он отображается как представление, а не как актив):

<% if @followed_car_ids.present? %>
for car_id_and_path in <%= @followed_car_ids_and_paths.to_json %>
  toggle_follow(car_id_and_path[0], true, car_id_and_path[1])
<% end %>

В контроллере:

@followed_car_ids_and_paths = @followed_cars.map{|car| [car.id, url_for(current_user.car_subscriptions.find_by_car_id(car))]}

Обратите внимание, что не имеет значения, помещу ли я карту (или соберу) в вид. Также не работает, если вместо url_for(....

поставить простую строку

выдает эту ошибку:

ActionView::Template::Error (Error: Parse error on line 1: Unexpected 'LOGIC'):
    1: <% if @followed_car_ids.present? %>
    2: for car_id_and_path in <%= @followed_car_ids_and_paths.to_json %>
    3:   toggle_follow(car_id_and_path[0], true, car_id_and_path[1])
    4: <% end %>
  app/views/general_ajax/_update_followed_cars.js.coffee:1:in `_app_views_general_ajax__update_followed_cars_js_coffee__3478461849674996439_70355260673980'

Когда я удаляю = из <%= в строке 2 и добавляю некоторый фиктивный массив до остановки ошибки:

for car_id_and_path in [1,2,3] <% @followed_car_ids_and_paths.to_json %>

Ошибка не возникает, если я использую плоский массив (не удваивается с картой):

for car_id_and_path in <%= @followed_car_ids %>

Ни когда это так:

for car_id_and_path in [[1, 'a'],[2, 'b'],[3, 'c']]

1 Ответ

5 голосов
/ 28 августа 2012

У меня была такая же проблема с анализом переменной экземпляра в json с использованием to_json в моем файле coffeescript.

Я решил проблему, добавив html_safe в строку:

@instance_var.to_json.html_safe

...