Rails 4 asset pipeline — как настроить области видимости?
У меня в проекте на Rails 4 есть два контроллера, назовем их для краткости c1 и c2.
В папке "assets/javascripts" лежат, соответственно, c1.js и c2.js, содержащие некоторые функции. У части функций идентичные имена, но разное поведение, например функция getXPath() есть и в c1.js, и в c2.js. Это приводит к проблемам, поскольку из c1 view может быть вызвана функция из c2.js.
Можно конечно именовать функции с именами контроллеров, например getXPathC1() / getXPathC2(), но я бы предпочел настроить области видимости так, чтобы в представлении c1 была доступна лишь c1.js, а в представлении c2 - лишь c2.js.
Как это можно сделать? Возможно ли вообще такое?
Если вам в гарантированно в контроллере c1 не понадобится джаваскрипт из c2 и наоборот, создайте два разных скомпилированных джаваскрипт-файла вместо одного (application.js), либо просто исключите c1.js и c2.js из application.js и подключайте их потом отдельно (второй способ менее трудозатратен, но увеличивается количество get-реквестов, т.к. получится по 2 подключаемых js-файла на контроллер - application.js и c1/2.js).
В обоих случаях для продуктового окружения нужно будет изменить настройки компиляции ассетов (т.к. по умолчанию в публичном доступе остаётся только application.js).
Хотя в сущности все они сводятся к одному, с той лишь разницей, как вы будете определять нужный js-файл для подключения - автоматически по названию контроллера, указывая название нужного файла во вьюхах или же определением нужных для страницы функций в самом js-коде.