在自定义呈现的ERB模板中使用名为routes的rails

时间:2009-10-28 21:10:57

标签: ruby-on-rails ruby erb

我在活动记录类上有一个方法,它为消息传递系统呈现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 个答案:

答案 0 :(得分: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 [:host],我还没有测试。

答案 1 :(得分:0)

尝试“include ApplicationController”

答案 2 :(得分:0)

我认为你正以错误的方式接近这一点。 MVC就是将模型与视图和控制器分离。您正试图让您的模型访问View,这不应该在Rails中完成。

有点问题,为什么?除非您计划将渲染的模板存储在模型中,否则您将采用错误的方式。即便如此,还有更好的方法。

例如在创建/更新时调用render:控制器中的部分。

包括所有这些额外的课程会让你的模型陷入困境。

答案 3 :(得分:0)

你真的只需要:

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

如果您尝试使用任何default_url_options[:host] 方法或_url而不只是url_for {{1>,您还需要设置 }}