2012-12-20 276 views
4

嗯,我到這個情況,以及現在使用的軌道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但它沒有幫助。

如何從演示者層呈現此部分?

回答

1

這不是典型的主持人模式。演示者用於集中複雜的數據和邏輯,以簡化視圖的渲染任務。在這裏,您正在渲染器內渲染。這真的是你想要的嗎?

說出答案是肯定的。然後只是創建一個新的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) 

我現在沒有一臺機器可以試用,但它應該比你有更多的可調試性。

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