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