Пользовательский рендерер Rail 3: куда поместить этот код?

Я следую примеру Йехуды о том, как создать собственный рендерер для Rails 3, согласно этому сообщению: http://www.engineyard.com/blog/2010/render-options-in-rails.-3/

Мой код работает, но мне трудно понять, где этот код должен жить. Прямо сейчас мой код застрял прямо внутри моего файла контроллера. При этом все работает. Однако, когда я перемещаю код в папку lib, я явно «требую» свой файл в контроллере, которому нужен рендерер, иначе он не будет работать. Да, файл автоматически загружается, когда он находится в папке lib. но код для добавления средства визуализации по какой-то причине не работает, пока я не сделаю для него требование.

где я должен поместить свой код для добавления рендерера и типа mime, чтобы rails 3 подхватил его и зарегистрировал для меня, без необходимости вручную запрашивать файл в моем контроллере?


person Derick Bailey    schedule 16.02.2011    source источник
comment
К вашему сведению: stackoverflow.com/questions /4794384/   -  person TK-421    schedule 16.02.2011


Ответы (3)


Я бы поместил его в инициализатор или в библиотеку и потребовал его в контроллере приложений.

person idlefingers    schedule 16.02.2011

В книге Хосе Валима Создание приложений Rails это первая глава. Он создает тип пантомимы PDF и средство визуализации с помощью Prawn.

В своем примере он создал lib/pdf_renderer.rb следующим образом:

require "action_controller" 
Mime::Type.register "application/pdf", :pdf

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

Здесь также может подойти инициализатор.

person Ben Scheirman    schedule 16.02.2011

я еще немного покопался в этом, основываясь на предложениях здесь.

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

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

спасибо за советы, всем.

person Derick Bailey    schedule 16.02.2011