同一网页上有2个分页错误

时间:2014-04-25 06:05:25

标签: ruby-on-rails ruby pagination will-paginate

我不是铁轨程序员的红宝石,但我已经在将第二个结果表添加到我的页面方面做得很远。

我遇到的问题是Pagination搞砸了。

首次加载时。一切都很正常。但是当您单击另一个页码时,它也会更改第二个表上的页面。 plus将第二个表的副本添加到页面中,就像第三个表一样。

我有screan镜头。

原始页面加载
Orignial when page loads http://www.digihaul.com/1.png

选择页面后

Once a page is selected http://www.digihaul.com/2.png

这是我的观点

.row-fluid#load_results_table
  .span12
    - if resultss.empty?
      =render partial: 'no_results', locals: {search: search}
    - else
      %h1.page-header Premium Loads
      %p= "These are our loads we are offering. We guarentee 100% payment on these loads"
    %table.table.search_results.table-condensed.table-bordered.table-striped.sortable{:id => "#{searches.search_type.pluralize}"}
      %thead
        %tr.search_header
          %th= sortable_load "origin"
          %th= sortable_load "dest"
          %th= sortable_load "pickup"
          %th= sortable_load "delivery"
          %th= sortable_load "ltl"
          %th= sortable_load "equipment_id", "Equipment"
          %th= sortable_load "weight"
          %th= sortable_load "length"
          %th= sortable_load "rate"
          -unless @searches.origin.blank?
            %th Estimated Deadhead Miles
          %th Actions
      %tbody
        - resultss.each do |result|
          %tr{:class => "#{searches.search_type}_view", :id => "#{result['id']}" }
            %td= Location.to_cs(result.origin)
            %td= Location.to_cs(result.dest)
            %td= format_date(result.pickup)
            %td= format_date(result.delivery)
            %td= full_or_par(result.ltl)
            %td= result.equipment_id ? Equipment.to_equipment_name(result.equipment_id) : ""
            %td= result.weight
            %td= result.length
            %td= result.rate
            -unless @searches.origin.blank?
              %td= Location.distance_between(@searches.origin.coords, result['origin'])
            %td
              .btn-group
                %a.btn.btn-info{ :href => "/#{searches.search_type.pluralize}/#{result['id']}" } Show
                %a.btn{ :href => "javascript:void(0)", :class => "save", user_id: @searches.user_id, :id => result['id']} Save
                %a.btn.btn-primary{ :href => "javascript:void(0)", :class => "cover_link", :user_id=> @searches.user_id } Cover 
    = will_paginate resultss, :renderer => BootstrapPagination::Rails
.row-fluid#load_results_table
  .span12
    - if results.empty?
      =render partial: 'no_results', locals: {search: search}
    - else
      %h1.page-header Search Results
      - if results.count > 1000
        %p= "Your search yielded many #{search.search_type.pluralize}"
      - else
        %p= "Your search yielded #{results.count} #{search.search_type.pluralize}"
      =render partial: 'header_buttons', locals: {search: search}
      %br
      = will_paginate results, :renderer => BootstrapPagination::Rails, id: "first_pagination"
      %table.table.search_results.table-condensed.table-bordered.table-striped.sortable{:id => "#{search.search_type.pluralize}"}
        %thead
          %tr.search_header
            %th= sortable_load "origin"
            %th= sortable_load "dest"
            %th= sortable_load "pickup"
            %th= sortable_load "delivery"
            %th= sortable_load "ltl"
            %th= sortable_load "equipment_id", "Equipment"
            %th= sortable_load "weight"
            %th= sortable_load "length"
            %th= sortable_load "rate"
            -unless @search.origin.blank?
              %th Estimated Deadhead Miles
            %th Actions
        %tbody
          - results.each do |result|
            %tr{:class => "#{search.search_type}_view", :id => "#{result['id']}" }
              %td= Location.to_cs(result.origin)
              %td= Location.to_cs(result.dest)
              %td= format_date(result.pickup)
              %td= format_date(result.delivery)
              %td= full_or_par(result.ltl)
              %td= result.equipment_id ? Equipment.to_equipment_name(result.equipment_id) : ""
              %td= result.weight
              %td= result.length
              %td= result.rate
              -unless @search.origin.blank?
                %td= Location.distance_between(@search.origin.coords, result['origin'])
              %td
                .btn-group
                  %a.btn.btn-info{ :href => "/#{search.search_type.pluralize}/#{result['id']}" } Show
                  %a.btn{ :href => "javascript:void(0)", :class => "save", user_id: @search.user_id, :id => result['id']} Save
                  %a.btn.btn-primary{ :href => "javascript:void(0)", :class => "cover_link", :user_id=> @search.user_id } Cover 
      = will_paginate results, :renderer => BootstrapPagination::Rails

控制器:

  def show
    @search = Search.find(params[:id])
    @searches = Search.find(params[:id])
    @results = @search.search(params[:page])
    @resultss = @searches.searches(params[:page])
    @search.update_attribute(:results, @results.count)
    @searches.update_attribute(:resultss, @resultss.count)
    respond_to do |format|
      format.html 
      format.js {render "results"}
      format.js {render "resultss"}
    end
  end

模型(最小化查询)

  def search(page)
    where = []
    where << PrepareSearch.states("dest", self.dest_states) unless self.dest_states.blank?
    if self.search_type == 'load'
      select = "loads.id, origin, dest, pickup, delivery, ltl, equipment_id, weight, length, rate"
      where << PrepareSearch.date('pickup', self.pickup, self.pickup_operator) unless self.pickup.blank?
    elsif self.search_type == 'truck'
      select = "trucks.id, origin, dest, available, expiration, equipment_id, comments"
      where << PrepareSearch.date('available',self.available,self.available_operator) unless self.available.blank?
    end
    where = where.join(' AND ')
    order = self.order_by ? self.order_by + " desc" : ""
    limit = "LIMIT=200"
      Module.const_get(self.search_type.capitalize).where(where).select(select).limit(limit).order(order).page(page).per_page(20)
  end


  def searches(page)
    where = []
    where << PrepareSearch.states("dest", self.dest_states) unless self.dest_states.blank?
    if self.search_type == 'load'
      select = "loads.id, origin, dest, pickup, delivery, ltl, equipment_id, weight, length, rate"
      where << PrepareSearch.date('pickup', self.pickup, self.pickup_operator) unless self.pickup.blank?
    elsif self.search_type == 'truck'
      select = "trucks.id, origin, dest, available, expiration, equipment_id, comments"
      where << PrepareSearch.date('available',self.available,self.available_operator) unless self.available.blank?
    end
    where = where.join(' AND ')
    order = self.order_by ? self.order_by + " desc" : ""
    limit = "LIMIT=200"
      Hotload.where(where).select(select).limit(limit).order(order).page(page).per_page(5)
  end

1 个答案:

答案 0 :(得分:1)

Ajax分页是一种方式,如评论中所述,但处理它的最佳方法是更改​​每个分页块的page参数


<强> PARAM_NAME

您可以使用Kaminari param_name(我知道您正在使用will_paginate)使用you're able to use the param_name argument too参数执行此操作。这基本上设置了param每个分页块读取,允许您以不同方式调用它们,从而控制不同的数据集:

<%= paginate collection, param_name: model.to_s %>

在使用will_paginate研究了如何执行此操作后,似乎{{3}}:

<%= will_paginate @products, param_name: 'products_page' %>