Module: WillPaginate::ActiveRecord::RelationMethods
- Includes:
- CollectionMethods
- Defined in:
- lib/will_paginate/active_record.rb
Overview
makes a Relation look like WillPaginate::Collection
Instance Attribute Summary collapse
-
#current_page ⇒ Object
Returns the value of attribute current_page.
- #total_entries ⇒ Object
Instance Method Summary collapse
- #clone ⇒ Object
- #count(*args) ⇒ Object
-
#empty? ⇒ Boolean
overloaded to be pagination-aware.
-
#find_last(*args) ⇒ Object
fix for Rails 3.0.
-
#first(*args) ⇒ Object
dirty hack to enable ‘first` after `limit` behavior above.
-
#limit(num) ⇒ Object
TODO: solve with less relation clones and code dups.
- #offset(value = nil) ⇒ Object
- #per_page(value = nil) ⇒ Object
-
#scoped(options = nil) ⇒ Object
workaround for Active Record 3.0.
-
#size ⇒ Object
workaround for Active Record 3.0.
- #to_a ⇒ Object
Methods included from CollectionMethods
#next_page, #out_of_bounds?, #previous_page, #total_pages
Instance Attribute Details
#current_page ⇒ Object
Returns the value of attribute current_page.
23 24 25 |
# File 'lib/will_paginate/active_record.rb', line 23 def current_page @current_page end |
#total_entries ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/will_paginate/active_record.rb', line 68 def total_entries @total_entries ||= begin if loaded? and size < limit_value and (current_page == 1 or size > 0) offset_value + size else @total_entries_queried = true result = count result = result.size if result.respond_to?(:size) and !result.is_a?(Integer) result end end end |
Instance Method Details
#clone ⇒ Object
114 115 116 |
# File 'lib/will_paginate/active_record.rb', line 114 def clone copy_will_paginate_data super end |
#count(*args) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/will_paginate/active_record.rb', line 81 def count(*args) if limit_value excluded = [:order, :limit, :offset, :reorder] excluded << :includes unless eager_loading? rel = self.except(*excluded) column_name = if rel.select_values.present? select = rel.select_values.join(", ") select if select !~ /[,*]/ end || :all rel.count(column_name) else super(*args) end end |
#empty? ⇒ Boolean
overloaded to be pagination-aware
106 107 108 109 110 111 112 |
# File 'lib/will_paginate/active_record.rb', line 106 def empty? if !loaded? and offset_value total_entries <= offset_value else super end end |
#find_last(*args) ⇒ Object
fix for Rails 3.0
54 55 56 57 58 59 60 |
# File 'lib/will_paginate/active_record.rb', line 54 def find_last(*args) if !loaded? && args.empty? && (offset_value || limit_value) @last ||= to_a.last else super end end |
#first(*args) ⇒ Object
dirty hack to enable ‘first` after `limit` behavior above
43 44 45 46 47 48 49 50 51 |
# File 'lib/will_paginate/active_record.rb', line 43 def first(*args) if current_page rel = clone rel.current_page = nil rel.first(*args) else super end end |
#limit(num) ⇒ Object
TODO: solve with less relation clones and code dups
33 34 35 36 37 38 39 40 |
# File 'lib/will_paginate/active_record.rb', line 33 def limit(num) rel = super if rel.current_page rel.offset rel.current_page.to_offset(rel.limit_value).to_i else rel end end |
#offset(value = nil) ⇒ Object
62 63 64 65 66 |
# File 'lib/will_paginate/active_record.rb', line 62 def offset(value = nil) if value.nil? then offset_value else super(value) end end |
#per_page(value = nil) ⇒ Object
26 27 28 29 30 |
# File 'lib/will_paginate/active_record.rb', line 26 def per_page(value = nil) if value.nil? then limit_value else limit(value) end end |
#scoped(options = nil) ⇒ Object
workaround for Active Record 3.0
119 120 121 |
# File 'lib/will_paginate/active_record.rb', line 119 def scoped( = nil) copy_will_paginate_data super end |
#size ⇒ Object
workaround for Active Record 3.0
97 98 99 100 101 102 103 |
# File 'lib/will_paginate/active_record.rb', line 97 def size if !loaded? and limit_value and group_values.empty? [super, limit_value].min else super end end |
#to_a ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/will_paginate/active_record.rb', line 123 def to_a if current_page.nil? then super # workaround for Active Record 3.0 else ::WillPaginate::Collection.create(current_page, limit_value) do |col| col.replace super col.total_entries ||= total_entries end end end |