WildcardScopes
Use ActiveRecord scopes with dynamic names.
Example
# 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
Notes
-
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.