如何在Rails 2.3.5中从模型呈现部分视图

5

我有一个Rails 2.3.5应用程序,我正在尝试从模型中渲染多个局部视图(我知道,我知道--我不应该这样做)。我这样做的原因是我正在将Comet服务器(APE)集成到我的Rails应用程序中,并需要根据模型事件(例如,after_create)推送更新。

我尝试过以下方法:

ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial  => "pages/show", :locals => {:page => self})

这使我能够呈现简单的局部视图,而不需要使用辅助函数。但是,如果我在我的局部视图中尝试使用link_to,我会收到一个错误,指出:

undefined method `url_for' for nil:NilClass

我已经确保传入“project_path(project)”的对象不为空。 我还尝试包含以下内容:

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

在包含上述“render”调用方法的模块中。有人知道如何解决这个问题吗?谢谢。

Rails.configuration.view_path - tribalvibes
2个回答

7
我们使用 render_anywhere gem,并且对其感到满意。
从 README 中可以看到:
require 'render_anywhere'

class AnyClass
  include RenderAnwhere

  def build_html
    html = render :template => 'normal/template/reference',
                  :layout => 'application'
    html
  end
end

1
这个问题涉及到Rails 2.3.x,但gem适用于“>= 3.0.7”。 - Michał Szajbe
2
我猜测当提问时,这个 gem 是针对 2.X 版本的。如果你仍在使用 2.3.x 版本,请尝试使用旧版本的标记。 - klochner

0
包含这两个模块应该就足够了。也许你忘记设置 default_url_options[:host] 了?如果没有设置,你可以使用 _path 辅助方法,但不能使用 _url 辅助方法。
包含这些模块并在 irb 中测试一下,也许会帮助你找到正确的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接