Помощники маршрутов в конвейере активов - PullRequest
49 голосов
/ 17 июля 2011

используя 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)")

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

Ответы [ 2 ]

88 голосов
/ 05 августа 2011

ОБНОВЛЕНИЕ: теперь есть гем, который сделает это за вас: js-routs


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

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

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

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

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

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

1 голос
/ 29 марта 2013

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

...