Module: Searchlogic::RailsHelpers
- Defined in:
- lib/searchlogic/rails_helpers.rb
Instance Method Summary collapse
-
#order(search, options = {}, html_options = {}) ⇒ Object
Creates a link that alternates between acending and descending.
Instance Method Details
#order(search, options = {}, html_options = {}) ⇒ Object
Creates a link that alternates between acending and descending. It basically alternates between calling 2 named scopes: “ascend_by_*” and “descend_by_*”
By default Searchlogic gives you these named scopes for all of your columns, but if you wanted to create your own, it will work with those too.
Examples:
order @search, :by => :username
order @search, :by => :created_at, :as => "Created"
This helper accepts the following options:
-
:by
- the name of the named scope. This helper will prepend this value with “ascend_by_” and “descend_by_” -
:as
- the text used in the link, defaults to whatever is passed to :by -
:ascend_scope
- what scope to call for ascending the data, defaults to “ascend_by_:by” -
:descend_scope
- what scope to call for descending the data, defaults to “descend_by_:by” -
:params
- hash with additional params which will be added to generated url -
:params_scope
- the name of the params key to scope the order condition by, defaults to :search
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/searchlogic/rails_helpers.rb', line 22 def order(search, = {}, = {}) [:params_scope] ||= :search if ![:as] id = [:by].to_s.downcase == "id" [:as] = id ? [:by].to_s.upcase : [:by].to_s.humanize end [:ascend_scope] ||= "ascend_by_#{[:by]}" [:descend_scope] ||= "descend_by_#{[:by]}" ascending = search.order.to_s == [:ascend_scope] new_scope = ascending ? [:descend_scope] : [:ascend_scope] selected = [[:ascend_scope], [:descend_scope]].include?(search.order.to_s) if selected css_classes = [:class] ? [:class].split(" ") : [] if ascending [:as] = "▲ #{[:as]}" css_classes << "ascending" else [:as] = "▼ #{[:as]}" css_classes << "descending" end [:class] = css_classes.join(" ") end = { [:params_scope] => search.conditions.merge( { :order => new_scope } ) }.deep_merge([:params] || {}) [:as] = raw([:as]) if defined?(RailsXss) link_to [:as], url_for(), end |