Pomocnicy trasy w rurociągu aktywów

Za Pomocą Rails 3.1.0.rc4, próbuję uzyskać dostęp do helpera trasy w pliku javascript (event.js.erb w tym przypadku) i wydaje się, że w tym momencie nie są ładowane. Przy składaniu wniosku o połączenie / aktywa / wniosek.plik js, dostaję:

throw Error("NameError: undefined local variable or method `events_path' for #<#<Class:0x00000001580010>:0x00000003191510>\n  (in /<...>/app/assets/javascripts/event.js.erb)")
Masz jakiś pomysł, jak dostać się do pomocnika?
Author: tbuehlmann, 2011-07-17

2 answers

UPDATE: Teraz jest klejnot, który robi to za Ciebie: js-routes


Problem polega na tym, że Sprockets ocenia ERB poza kontekstem aplikacji Rails, A większości rzeczy, których oczekujesz, nie ma.

Możesz dodać rzeczy do kontekstu zębatek w następujący sposób:

Rails.application.assets.context_class.class_eval do
  include Rails.application.routes.url_helpers
end
To wszystko dobrze i dobrze, ale uzyskanie pomocników, którzy wymagają identyfikacji do pracy, jest trochę trudniejsze. Użyję techniki zwanej URI Szablon :
var event_path = "<%= CGI.unescape event_path('{event_id}') %>";

, który zwraca /events/{event_id}, który można renderować do adresu url za pomocą obiektu typu { event_id: 1 }. Zobacz metodę SugarJS String#assign jako przykładową implementację tego. Możesz też kręcić swoje własne, tak jak ja.

 88
Author: Adam Lassek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-21 22:28:46

Możesz przenieść plik do widoków, gdzie ma dostęp do odpowiedniego kontekstu, a następnie przeciągnąć go do klienta ze znacznika źródłowego JS. Odnosząc się do aplikacji MyRailsApp::.trasy.url_helpers może nie być najlepszy, jeśli piszesz silnik.

 1
Author: Peter Hawkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-29 14:36:53