首页 > 解决方案 > 基于条件和来自不同数组的部分渲染

问题描述

一个有点复杂的动作将两组数组组合成一个数组。

@packages = (@packageoffers + @availables).sort_by(&:cost).paginate :page => params[:page], :per_page => 20

然后视图呈现部分

@packages.each do |package|
  if @packages_m.include?(package)
    @mss = true
    render partial: 'package', collection: @packages
  elsif @availables.include?(package)
     @mss = false
     render partial: 'package', collection: @packages
  else
  end

所述部分然后有两个基于@mss的条件块(html代码被剥离):

number_to_currency(markup_price)
if @mss == true
  package.typounit.stars
else
  package.product_category

发生的错误是偶然的

ActionView::Template::Error (undefined method 'product_category' for #<Packageoffer:

偶尔,因为分页通过三角测量给出了一个位置:所有结果都来自一个数组或另一个渲染的页面。结果来自两个数组的页面会生成错误。

虽然我可以看到这种行为,但我无法理解为什么当集合来自同一个类时它会起作用。

那么解决方案是什么?我看到了两种可能性:
• 可以部分调用子数组(@packageoffers@availables)吗?
• 布尔值是否@mss可能是罪魁祸首?
• 分页可能会成为一个问题,因为rails 可能无法跟踪要计数的集合

标签: ruby-on-railsrenderpartial

解决方案


我想一个问题是你渲染集合 https://api.rubyonrails.org/v5.0.7/classes/ActionView/PartialRenderer.html

我希望它可以帮助你

  if @packages_m.include?(package)
    render partial: 'package', locals: { package: package, mss: true }
  elsif @availables.include?(package)
     render partial: 'package', locals: { package: package, mss: false }
  else
  end

  if mss
    package.typounit.stars
  else
    package.product_category

推荐阅读