Rails 3 с жидкими пользовательскими тегами не найдены - PullRequest
1 голос
/ 19 ноября 2010

Я пытаюсь создать набор пользовательских тегов для некоторых жидких шаблонов с использованием Rails 3. Я добавил 'liquid_tags.rb' в мою папку lib / с содержимым, подобным этому:

class UserControls < Liquid::Tag                                             
  def initialize(tag_name)
     super 
  end

  def render(context)
    tag = "<b>TAG</b>"
  end    
end

Liquid::Template.register_tag('user_controls', UserControls)

Когда я пытаюсь получить тег в моем представлении через '{% user_controls%}', он говорит мне, что тег не найден.

Есть идеи?

Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 13 сентября 2011

Это верно, как говорит marcusmateus, Rails не будет загружать что-либо в каталог lib автоматически, даже если вы добавили его в autoload_paths, если имя класса или модуля внутри файла не совпадает с именем файла.

Чтобы разобраться с этой проблемой, просто поместите пользовательские средства форматирования в каталог lib, каждый в своем собственном файле (я пытался использовать модуль, чтобы обернуть их все, но не повезло)

  class MyCustomTag < Liquid::Tag
    def initialize(tag_name, params, tokens)
      # do something
    end

    def render(context)
      # do something
    end
  end

Затем создал инициализатор (в конфигурации/ initializers) отвечает за регистрацию пользовательских тегов в Liquid.то есть

Liquid::Template.register_tag('custom_tag', MyCustomTag)
Liquid::Template.register_tag('custom_tag', MyCustomTag2EtcEtc)
1 голос
/ 12 февраля 2011

в config / application.rb попробуйте добавить эту строку

config.autoload_paths << File.join(config.root, "lib")
0 голосов
/ 09 мая 2011

Я считаю, что файлы загружаются автоматически, только если имя файла совпадает с именем класса, который он содержит. В вопросе вы утверждаете, что ваш файл называется 'liquid_tags.rb', но ваш класс называется UserControls ... если вы переименуете свой файл 'user_controls.rb', он должен начать автозагрузку.

0 голосов
/ 30 ноября 2010

Я думаю, что это не проблема загрузки - у меня это тоже есть. Тег загружается, вы можете распечатать текущие зарегистрированные теги:

Liquid::Template.tags.inspect
0 голосов
/ 19 ноября 2010

Вы уверены, что файл загружается?Если это не так, то register_tag никогда не вызывается.Я бы добавил оператор put выше register_tag для его отладки, чтобы убедиться, что файл действительно загружается.Вы можете переместить register_tag в инициализатор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...