1

我在活动记录类上有一个方法,它为消息传递系统呈现 ERB 模板。简化的代码如下所示:

ERB.new(template).result(binding) 

其中binding是 ActiveRecord 模型对象的当前 Binding,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

4 回答 4

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],我还没有测试。

于 2009-10-29T14:17:17.943 回答
0

尝试“包括 ApplicationController”

于 2009-10-28T21:40:17.790 回答
0

我认为您以错误的方式处理此问题。MVC 就是将模型与视图和控制器分开。你试图让你的模型访问视图,这在 Rails 中是不应该的。

这就引出了一个问题,为什么?除非您打算将渲染的模板存储在模型中,否则您将走错路。即使这样,也有更好的方法来做到这一点。

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

包括所有这些额外的类将使您的模型陷入困境。

于 2009-10-28T21:47:40.053 回答
0

你真的只需要:

包括 ActionView::Helpers::UrlHelper
包括 ActionController::UrlWriter

如果您default_url_options[:host]尝试使用任何_url方法或url_for而不是仅_path使用.

于 2010-04-13T19:31:27.217 回答