Как переопределить erb жидкостью?

Я добавил тематический каталог в свое приложение, как описано здесь, используя prepend_view_path. Он работает так, как ожидалось. Теперь я могу добавить структуру представления в свое приложение под app/themes/my_theme/views

Теперь я хочу иметь возможность переопределять шаблоны erb, добавляя файл .liquid, который будет отображаться сразу после действия контроллера.

Например, я хочу переопределить app/views/pages/home.html.erb:

<h1><%= t 'it_works' %></h1>

...с app/themes/my_theme/views/pages/home.liquid

<h1>It works with {{ "liquid" }}</h1>

Я не хочу указывать массив путей просмотра (обслуживание было бы ужасным), а просто добавляю .liquid в качестве слоя в механизм шаблонов. Возможно, однако, иметь черный список защищенных представлений, которые нельзя переопределить (например, app/views/admin/*)


person Kyle Macey    schedule 07.10.2013    source источник


Ответы (2)


У вас есть жидкий обработчик шаблонов? В противном случае Rails не будет знать, что вы хотите делать с файлами .liquid. См. этот пост в блоге: http://royvandermeij.com/blog/2011/09/21/create-a-liquid-handler-for-rails-3-dot-1/

Что касается вашего второго вопроса: не используя тему для app/views/admin/*, вы должны убедиться, что у вас есть AdminController, который не prepend_view_path.

person joost    schedule 11.10.2013
comment
+1 за решение для черного списка. Теперь просматриваем сообщение в блоге обработчика. - person Kyle Macey; 11.10.2013

Согласно документации вы можете использовать prepend_view_path

Добавьте следующее в ApplicationController:

before_filter :set_theme_path

def set_theme_path
  prepend_view_path "app/themes/#{current_theme}"
end

Таким образом, Rails должен затем искать любые представления в каталоге вашей темы, а не представления по умолчанию в app/views/**/*

person Andrew Hacking    schedule 10.10.2013
comment
Да, я сделал это. Но это только читает erb файлов. Я хочу использовать liquid вместо erb. - person Kyle Macey; 10.10.2013
comment
Как вы называете свои шаблоны? Вероятно, их нужно назвать foo.html.liquid. - person Andrew Hacking; 11.10.2013
comment
Также немного несправедливо голосовать против ответа, который не является неправильным. Как вы признаете, вы делаете то, что я написал. В вашем окружении может быть миллион вещей, которые вы не раскрыли или не уточнили в своем вопросе. - person Andrew Hacking; 11.10.2013
comment
Было справедливо понизить голос, поскольку в своем вопросе я указал, что уже использую prepend_view_path. Ответ не был похож на то, что он был от кого-то, кто действительно нашел время, чтобы понять вопрос. - person Kyle Macey; 11.10.2013