Помощники маршрутов в конвейере активов - программирование
Подтвердить что ты не робот

Помощники маршрутов в конвейере активов

используя Rails 3.1.0.rc4, я пытаюсь получить доступ к помощнику маршрута в файле javascript (event.js.erb в этом случае), и кажется, что они не загружены в этот момент. Когда вы запрашиваете объединенный файл /assets/application.js, я получаю:

throw Error("NameError: undefined local variable or method `events_path' for #<#<Class:0x00000001580010>:0x00000003191510>\n  (in /<...>/app/assets/javascripts/event.js.erb)")

Любая идея, как получить доступ к помощнику маршрута там?

4b9b3361

Ответ 1

UPDATE: теперь есть камень, который делает это для вас: js-routes


Проблема в том, что Sprockets оценивает ERB вне контекста вашего приложения Rails, и большинство вещей, которые вы ожидаете, не существует.

Вы можете добавить вещи в контекст Sprockets следующим образом:

Rails.application.assets.context_class.class_eval do
  include Rails.application.routes.url_helpers
end

Это хорошо и хорошо, но получение помощников, требующих работы с идентификатором, немного сложнее. Я собираюсь использовать технику под названием URI Template:

var event_path = "<%= CGI.unescape event_path('{event_id}') %>";

который возвращает /events/{event_id}, который вы могли бы отобразить в URL-адрес, используя объект типа { event_id: 1 }. См. SugarJS String # присваивать метод в качестве примера реализации этого. Вы также можете перевернуть свой собственный, как я.

Ответ 2

Вы можете переместить файл в представления, где он имеет доступ к надлежащему контексту, а затем вытащить его клиенту из тега источника JS. Ссылаясь на MyRailsApp:: Application.routes.url_helpers, возможно, не лучше, если вы пишете движок.