Reputation: 77
I am not a ruby on rails programmer but i have gotten quite far with adding a second results table to my page.
the problem that i have is that the Pagination is messed up.
When it is first loaded. everything looks right. but when you click on another page number it changes the page on second table as well. plus adds a copy of the second table as like a 3rd table to the page.
i have screan shots.
Original page loads
Orignial when page loads http://www.digihaul.com/1.png
Once a page is selected
here is my View
.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
Controller:
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
Model (minimized the query)
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
Upvotes: 1
Views: 131
Reputation: 76784
Ajax pagination is one way, as described in the comments, but the best way to handle it will be to change the page
param for each pagination block
param_name
You can do this with Kaminari
(I know you're using will_paginate
) using the param_name
argument. This basically sets the param
each pagination block reads, allowing you to call them differenetly, thus controlling different sets of data:
<%= paginate collection, param_name: model.to_s %>
Having researched how to do this with will_paginate
, it seems you're able to use the param_name
argument too:
<%= will_paginate @products, param_name: 'products_page' %>
Upvotes: 1