2009-10-28 5 views
1

У меня есть метод в активном классе записей, который отображает шаблон ERB для системы обмена сообщениями. Упрощенный код выглядит следующим образом:Использование маршрутов с указанием маршрутов в пользовательских визуализированных шаблонах ERB

ERB.new(template).result(binding) 

где binding является текущим Binding модельного объекта ActiveRecord и template является файл шаблона ERB читать из файловой системы.

Я хотел бы использовать некоторые именованные маршруты в шаблоне, но не смог сделать названные маршруты доступными.

Я видел сообщения всего о том, чтобы включить/требуют различных комбинации следующей в текущую модель ActiveRecord (или, предпочтительно, как одноточечный):

include ActionView::Helpers::TagHelper 
include ActionView::Helpers::AssetTagHelper 
include ActionController::UrlWriter 
require 'action_controller/routing' 
include ActionController::Routing 
include ActionController::Routing::Routes 
include ActionController::Routing::NamedRoutes 

Некоторые из этих ошибок, и я думаю, не правильно вообще ... другие, я не вижу никакой пользы, поскольку маршруты все еще не работают. У кого-нибудь есть идея?

ответ

0

Try "включают ApplicationController"

+0

ApplicationController - это класс, поэтому он не может быть включен, это часть проблемы с некоторыми из моих первоначальных утверждений в вопросе. – johnml

0

Я думаю, что вы приближается это неправильный путь. MVC - это разделение моделей из представлений и контроллеров. Вы пытаетесь предоставить доступ модели к представлению, что не должно быть сделано в Rails.

Это вопрос, почему? Если вы не планируете хранить визуализированный шаблон в своей модели, вы делаете это неправильно. Даже тогда есть лучшие способы сделать это.

Например, вызов визуализации: частичный в контроллере при создании/обновлении.

Включая все эти дополнительные классы, вы будете увязывать свою модель.

+0

Ситуация, которую вы описываете, не совсем то, что мы делаем. Правда, мы могли бы разбить это на несколько другую настройку с некоторым классом типа контроллера между моделью и рендерингом, но в настоящее время это не кажется необходимым. То, что мы делаем, действительно предоставляет пользовательский доступ к представлению/рендерингу к методам просмотра приложений и рельсов. Кроме того, методы не обязательно должны включаться в модель в целом, только когда вызывается метод, содержащий «ERB.new». Обычно это делается в фоновом режиме, а не в середине каждого веб-запроса. – johnml

1

Я получил все именованные маршруты и теги хелперы в связывании с помощью:

class << self 
    include LegacyUrlsHelper #a proprietary module 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::AssetTagHelper 
    include ActionView::Helpers::UrlHelper 
    include ActionController::UrlWriter 
end 

Единственная проблема может быть установка default_url_options [: хост], что у меня есть еще проверить.

0

Вам действительно нужно всего лишь:

 
include ActionView::Helpers::UrlHelper 
include ActionController::UrlWriter 

Вам также потребуется установить default_url_options[:host], если вы пытаетесь использовать любые _url методы или url_for вместо просто _path.

Смежные вопросы