如何渲染部分演示者层的轨道?
嗯,我到这个情况,以及现在使用的轨道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但它没有帮助。
如何从演示者层呈现此部分?
回答:
这不是典型的主持人模式。演示者用于集中复杂的数据和逻辑,以简化视图的渲染任务。在这里,您正在渲染器内渲染。这真的是你想要的吗?
说出答案是肯定的。然后只是创建一个新的ActionView::Base
正在寻求麻烦,因为初始化它是不平凡的as shown here。一些奇怪的事情发生在班级或其他类型的嵌套上。 passion_concept_
前缀来自错误消息的位置在哪里?看起来你没有告诉我们我们需要关于你的应用的所有信息。
您可以告诉主持人明确它的渲染找到快乐:在视图
class FormPresenter def self.render_form(view)
view.render partial: "passions/add_form"
end
end
然后:(?这里的解释又是不清楚什么是AddFormPresenter
)
= FormPresenter.render_form(self)
我现在没有一台机器可以试用,但它应该比你有更多的可调试性。
回答:
好吧,我只是通过使用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
以上是 如何渲染部分演示者层的轨道? 的全部内容, 来源链接: utcz.com/qa/264228.html