Использование рельсов с именованными маршрутами в пользовательских шаблонах ERB - PullRequest
1 голос
/ 29 октября 2009

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

ERB.new(template).result(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 

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

Ответы [ 4 ]

1 голос
/ 29 октября 2009

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

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 [: host], которую я еще не протестировал.

0 голосов
/ 13 апреля 2010

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

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

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

0 голосов
/ 29 октября 2009

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

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

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

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

0 голосов
/ 29 октября 2009

Попробуйте "включить ApplicationController"

...