如何使用分页的雷(will_paginate或)阵列的哈希宝石(How do I paginate

2019-09-19 18:22发布

我已经成功,现在找到一个解决办法了这一点。 该指数的行动现在有一个“秩序”条款调用页面之前,然后将饭菜分类和按日期分组。 接下来,hackey位:@total_pages和@pages在视图用于提供分页链接为这个内置的辅助用@meals返回的不使用数组的哈希工作。 它的工作原理(种),但它是hackey。 移动视图的东西变成一个辅助肯定会帮助它清理干净,这是我的下一个步骤。

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 = (1..@total_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

任何帮助将受到欢迎!

Answer 1:

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


Answer 2:

这是一个,而研究周围,如果你要使用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)%>是显示在视图菜单分页代码

希望这有助于其他人谁具有同样的问题。



文章来源: How do I paginate a hash of arrays using the Kaminari (or will_paginate) gem