Module: Searchlogic::RailsHelpers
- Defined in:
- lib/searchlogic/rails_helpers.rb
Instance Method Summary collapse
-
#fields_for(*args, &block) ⇒ Object
Automatically adds an “order” hidden field in your form to preserve how the data is being ordered.
-
#form_for(*args, &block) ⇒ Object
Automatically makes the form method :get if a Searchlogic::Search and sets the params scope to :search.
-
#order(search, options = {}, html_options = {}) ⇒ Object
Creates a link that alternates between acending and descending.
Instance Method Details
#fields_for(*args, &block) ⇒ Object
Automatically adds an “order” hidden field in your form to preserve how the data is being ordered.
69 70 71 72 73 74 75 76 77 |
# File 'lib/searchlogic/rails_helpers.rb', line 69 def fields_for(*args, &block) if search_obj = args.find { |arg| arg.is_a?(Searchlogic::Search) } args.unshift(:search) if args.first == search_obj concat(content_tag("div", hidden_field_tag("#{args.first}[order]", search_obj.order))) super else super end end |
#form_for(*args, &block) ⇒ Object
Automatically makes the form method :get if a Searchlogic::Search and sets the params scope to :search
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/searchlogic/rails_helpers.rb', line 55 def form_for(*args, &block) if search_obj = args.find { |arg| arg.is_a?(Searchlogic::Search) } = args. [:html] ||= {} [:html][:method] ||= :get [:url] ||= url_for args.unshift(:search) if args.first == search_obj args << end super end |
#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 |