2

我有以下模型關聯:如何以這種方式分頁黑子?

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 

我怎樣才能做到這一點?

+0

我有一個困難時期之後,要誠實。首先,產品一方面如何「有很多價格」,另一方面「屬於很多價格(複數!)」? – polarblau

+0

@polarblau我按問題編輯以便更清晰。 – LearningRoR

回答

3

這使我想到的第一件事就是查詢在價格模型:

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

使事情更容易爲你的訪問量:prices.map! { |p| p.product }

+0

對不起,這是很難完全理解。我正在搜索'價格'還是我正在用'Product'搜索? – LearningRoR

+0

我發佈的代碼是搜索價格。它的作用是將表格Price與表格產品內部聯接,以獲取與特定的一組product_id匹配的所有價格。然後,分頁結果。最後,代碼的最後一行反轉結果集,並按產品對其進行索引。 – Tiago

+0

還有一點需要注意。我從來沒有使用太陽黑子,但我想你必須將搜索分爲兩部分:1)'@search =產品搜索沒有分頁; 2)我在上面的帖子中描述的方法,使用product_id輸入來自太陽黑子搜索的結果集。 – Tiago