Как таким образом разбить солнечное пятно? - PullRequest
2 голосов
/ 13 ноября 2011

У меня есть следующие ассоциации моделей:

class Product < ActiveRecord::Base
  has_many :prices

class Price < ActiveRecord::Base
  belongs_to :product

Вот мой контроллер

class SearchController < ApplicationController

  # Using Sunspot here.
  def index
    @search = Product.search do
      fulltext params[:search]
      paginate(:per_page => 5, :page => params[:page])
    end
    @products = @search.results
  end
end

а потом мой взгляд:

<%= will_paginate @products %>
<% @products.each do |product| %>
    <%= product.name %>
  <% prices.each do |price| %>
    <%= price.price %>
  <% end %>
<% end %>

Допустим, у меня есть 10 продуктов, каждый из которых имеет 20 разных цен. Моя цель - показать 5 товаров на странице, но перевести цены на следующую страницу, если количество цен на странице превышает максимум 25 за раз.

Вот два разных примера того, что я хочу сделать:

 Product 1, 2, 3, 4 + 5 Prices each = same page
 Product 5 + 6 Prices = this Product with Prices on next page

Или

Product 1 + 23 prices = same page
Product 2 + 20 prices = next page with Product and prices

Как мне этого добиться?

1 Ответ

3 голосов
/ 14 ноября 2011

Первое, что приходит мне в голову, это запросить модель Price:

prices = Price.joins(:product).where(:product_id => [1,2,3]).paginate(:page => params[:page])

И чтобы упростить ваши взгляды: prices.map! { |p| p.product }

...