好吧,我现在也使用rails 3.2.1
进入这种情况
以下是app/presenters/form_presenter.rb
class FormPresenter
def render_form
ActionView::Base.new.render partial: "passions/add_form"
end
end
从我打电话来看,
...
= AddFormPresenter.new.render_form
...
但它会出现以下错误:
13:14:12 ActionView::MissingTemplate - Missing partial passions/passion_concept_add_form with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :handlers=>[:erb, :builder, :slim, :coffee, :rabl]}. Searched in:
...
在RAILS-3.1 render method for ActionView::Base有这个类似的问题,但没有帮助。
如何从演示者图层渲染此部分?
答案 0 :(得分:2)
好吧,我只是通过使用before过滤器抓取视图上下文来完成它。我的参考是:https://github.com/amatsuda/active_decorator/blob/master/lib/active_decorator/view_context.rb
类似于:
class FormPresenter
def render_form
FromPresenter.view_context.render partial: "passions/add_form"
end
class << self
def view_context
Thread.current[:view_context]
end
def view_context=(view_context)
Thread.current[:view_context] = view_context
end
end
module Controller
extend ActiveSupport::Concern
included do
before_filter do |controller|
FormPresenter.view_context = controller.view_context
end
end
end
end
并在application_controller.rb
中class ApplicationController < ActionController::Base
...
include FormPresenter::Controller
...
end
答案 1 :(得分:1)
这不是典型的演示者模式。演示者用于集中简化视图渲染任务所需的复杂数据和逻辑。在这里,您将在演示者内部进行渲染。这真的是你想要的吗?
说答案是肯定的。然后只是创建一个新的ActionView::Base
就会遇到麻烦,因为初始化它是非平凡的as shown here。有些奇怪的事情正在上课或其他类型的筑巢。 passion_concept_
前缀来自错误消息中的哪个位置?看起来您并没有告诉我们您的应用所需的全部内容。
您可以通过明确告诉演示者在哪里呈现来获得快乐:
class FormPresenter
def self.render_form(view)
view.render partial: "passions/add_form"
end
end
然后在视图中:
= FormPresenter.render_form(self)
(这里的解释还不清楚。什么是AddFormPresenter
?)我没有一台机器,我现在可以尝试这个,但它应该比你有更多的可调试性