如何渲染部分演示者层的轨道?

嗯,我到这个情况,以及现在使用的轨道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

回到顶部