Частичный рендеринг основан на условии и получен из другого массива - PullRequest
0 голосов
/ 28 сентября 2018

Несколько сложное действие объединяет два набора массивов в один.

@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 code stripped ):

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 возможным виновником?
• В этом случае проблема нумерации страниц может стать проблемойпоскольку рельсы могут потерять след, какую коллекцию считать

1 Ответ

0 голосов
/ 29 сентября 2018

Полагаю, проблема в том, что вы визуализируете коллекцию 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
...