Для JavaScript для конкретной страницы я обычно делаю что-то вроде этого:
Приложение Helper
В помощнике приложения я создаю атрибут класса (хотя вы также можете использовать атрибут данных).
module ApplicationHelper
def body_attributes
controller = params[:controller].gsub('/', ' ')
action = params[:action]
version = @version ? "version_#{@version}" : nil
{
class: ([controller, action, version] - [nil]).join(' ')
}
end
end
Примечание. Я также добавляю строку версии. Это помогает в экспериментах с контентом Google и упрощает A / B-тестирование.
Application.html.haml
В моем глобальном файле макета я делаю что-то вроде этого, чтобы вставить атрибуты в тег body:
!!! 5
%html
%head
...
%body{body_attributes}
script.js
Теперь в скрипте, специфичном для моей страницы, я просто проверяю атрибуты класса, например:
$(function () {
if ($('body.pledge.new, body.pledge.create').length > 0) {
// do work here...
}
});
Преимущество этого метода в том, что получить тело по классу очень быстро. Сценарий внутри условия не будет выполняться вообще ни на одной странице, кроме тех, которые я выбрал, поэтому минимальные накладные расходы, и мне не нужно менять селекторы во всем коде.
EDIT
Обратите внимание, что этому ответу уже 3 года. Вместо этого вы должны использовать клиентскую маршрутизацию с такой инфраструктурой, как React.