Use ActiveRecord scopes with dynamic names.
# config/initializers/wildcard_scopes.rb # Global scopes. Wildcard scope should be wrapped in a proc. a is array of matches. ActiveRecord::Base.wildcard_scope /descend_by_(.*)/, proc { |a| order("#{table_name}.#{a.first} DESC") } # app/models/user.rb class User < ActiveRecord::Base wildcard_scope /ascend_by_(.*)/, proc { |a| order("#{table_name}.#{a.first} ASC") } end User.ascend_by_name.to_sql # SELECT "users".* FROM "users" ORDER BY users.name ASC User.ascend_by_position.to_sql # SELECT "users".* FROM "users" ORDER BY users.position ASC User.descend_by_name.to_sql # SELECT "users".* FROM "users" ORDER BY users.name DESC
-
This gem is created to simplify migration from SearchLogic to Ransack.
-
Use of global scopes is not a good idea at all.
-
Association extensions are not yet allowed.
-
Tested with Rails 3.1, Ruby 1.8.7 and 1.9.3.