我有一个像这样循环的视图:
- @pages.each do |page|
= render 'page_item', page: page, disable_nesting: true
我想为'page_item'
partial。
我知道视图对象的最佳实践是在控制器操作结束时实例化它们,但在这种情况下,这是不可能的,因为该操作适用于父视图而不是部分{{1 }}
我应该在哪里实例化此视图对象?
答案 0 :(得分:0)
您可以为父模型创建演示者,以便在调用方法时为您构建子演示者:
# parent_presenter.rb
class ParentPresenter
attr_reader :parent
def initialize(parent)
@parent = parent
end
def page_presenters
parent.pages.map { |page| PagePresenter.new(page) }
end
end
页面模型需要一个单独的演示者:
# page_presenter.rb
class PagePresenter
attr_reader :page
def initialize(page)
@page = page
end
def presenter_method
# Presentation logic here
end
end
您的控制器操作如下所示:
# parents_controller.rb
class ParentsController < ApplicationController
def show
parent = Parent.find(params[:id])
@parent_presenter = ParentPresenter.new(parent)
end
end
现在,您可以这样做:
- @parent_presenter.page_presenters.each do |page_presenter|
= render 'page_item', presenter: page_presenter, disable_nesting: true