2012-07-18 15 views
4

我已經成功,現在找到一個解決方法,以這種陣列的哈希值。索引操作現在在呼叫頁面之前有一個「訂單」條款,然後按日期對餐食進行分類和分組。接下來,hackey位:@total_pages和@pages在視圖用於提供分頁鏈接爲這個內置的輔助用@meals返回的不使用數組的哈希工作。它工作(種),但它是hackey。將視圖的東西移動到幫手中肯定會幫助清理它,這是我的下一步。如何使用分頁的雷(或will_paginate)寶石

def index 
    @meals = Meal.order('date DESC').page(params[:page]).text_search(params[:query]).sort_by(&:date).reverse.group_by(&:date) 
    @total_pages = (Meal.all.size/7.to_f).ceil 
    @pages = ([email protected]_pages).to_a 
respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @meals } 
end 

我真的需要這個幫助 - 它已經快把我逼瘋了幾天。我想分頁數組的散列。我曾經嘗試都will_paginate和雷,但無法找到一個方法來分頁所產生的哈希值。

我運行的Rails 3.2.6,1.9.3的Ruby和PostgreSQL 9.1.3是做搜索...

在我的控制器(使用雷)我有:

def index 
    @meals = Meal.text_search(params[:query]).sort_by(&:date).reverse.group_by(&:date).page(params[:page]) 
respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @meals } 
    end 
end 

而且在我的模型,我有以下的搜索:

def self.text_search(query) 
    if query.present? 
    where("description @@ :q or meal_time @@ :q", q: query) 
    else 
    scoped 
    end 
end 

在我看來,模板:

<div class="container"> 
    <div class="row"> 
<%= form_tag meals_path, method: :get, :class => "well form-search" do %> 
    <%= text_field_tag :query, params[:query], 
        :class => "span3" %> 
    <%= submit_tag "Search", name: nil, :class => "btn" %> 
    <% if current_user %> 
     <p class="pull-right"> 
    <%= link_to "Add a meal", 
       new_meal_path, 
       :class => 'btn btn-success' %> 
    </p> 
    <% else %> 
    <% end %> 
<% end %>  
</div> 
<table class="table table-striped"> 
<tbody> 
    <% @meals.each do |date, meals| %> 
    <tr> 
    <td> 
     <h2><%= date.to_s(:day_of_month) %></h2> 
     <h6><%= date.to_s(:date_and_month) %></h6> 
     <p><span class="badge badge-warning"><%= pluralize(meals.size, "meal") %></span></p> 
    </td> 
    <% meals.each do |meal| %> 
     <td> 
     <p> 
      <strong> 
      <%= meal.consumed_at.to_s(:just_the_time)%> 
      <%= meal.meal_time %> &#8212; 
      <%= meal.description %> 
      </strong> 
     </p> 
     <%= link_to "Ingredients", meal_path(meal) %> 
     </td> 
     <% end %> 
    </tr> 
    <% end %> 
</tbody> 
</table> 
</div> 
<%= paginate @meals %> 

這將返回以下錯誤:

NoMethodError in MealsController#index 

undefined method `page' for Hash 

任何幫助將受到歡迎!

+0

我不知道紅寶石什麼,但你不一般的搜索功能分頁,而不是後來呢?我的意思是說,你會得到所有結果,然後在散列中分頁!在text_search部分...不應該有「skip」和「limit」命令嗎? – sinni800 2012-07-18 23:00:29

+0

@ sinni800 - 感謝您的幫助。我已經設法找到了一個(現在就可以做)的方式(一點點黑客)。 – user792649 2012-07-19 17:32:32

+0

你可以張貼周圍的工作? – 2013-01-31 19:14:27

回答

2
Kaminari.paginate_array(ARRAY_OBJECT).page(params[:page]).per(50) 
0

這是一個,而研究周圍,如果你要使用will_paginate(雷更靈活和更容易使用)

current_page = params[:page] || 1 
    per_page = params[:per_page] || 20 
    length = @data.length 

    @data = WillPaginate::Collection.create(current_page, per_page, length) do |pager| 
    pager.replace @data[pager.offset, pager.per_page].to_a 
    end 

運行這些代碼後後我的解決方案,將@data一樣與will_paginate尋呼一個ActiveRecord對象:

  • @data是散列的陣列

  • <%= will_paginate(@data)%>是顯示分頁菜單鑑於

希望這個代碼幫助其他人誰具有同樣的問題。