Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中,如何在部分视图中实现视图对象_Ruby On Rails_Ruby_Haml - Fatal编程技术网

Ruby on rails 在RubyonRails中,如何在部分视图中实现视图对象

Ruby on rails 在RubyonRails中,如何在部分视图中实现视图对象,ruby-on-rails,ruby,haml,Ruby On Rails,Ruby,Haml,我有一个视图,它通过一个局部循环,如下所示: - @pages.each do |page| = render 'page_item', page: page, disable_nesting: true 我想实现一个视图对象,用于显示'page\u item'partial 我知道视图对象的最佳实践是在控制器操作结束时实例化它们,但在这种情况下这是不可能的,因为该操作应用于父视图,而不是部分'page\u item' 我应该在何处实例化此视图对象?您可以为父模型创建一个演

我有一个视图,它通过一个局部循环,如下所示:

- @pages.each do |page|
          = render 'page_item', page: page, disable_nesting: true
我想实现一个视图对象,用于显示
'page\u item'
partial

我知道视图对象的最佳实践是在控制器操作结束时实例化它们,但在这种情况下这是不可能的,因为该操作应用于父视图,而不是部分
'page\u item'


我应该在何处实例化此视图对象?

您可以为父模型创建一个演示者,在调用方法时为您生成子演示者:

# 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