Às vezes, você pode achar útil serializar o escopo ActiveRecord para persisti-lo ou passá-lo para o trabalhador, por exemplo, sidekiq / resque.
Uma solução super simples é usar to_sql no escopo ActiveRecord:
ActiveRecord.where('created_at > ?', Time.now).to_sql
Mas a persistência de consultas sql pode não ser a solução mais elegante.
A partir de 0.6.0.rc has_scope gem mudou o esquema de inicialização que permite que seja usado sem controlador.
module Scope
def self.included(base)
base.has_scope :with_name_like
base.has_scope :with_title_like
end
end
class PostsController < ApplicationController
include Scope
def index
search_params = params[:post_search] || {}
@posts = apply_scopes(Post, search_params)
end
end
class PostProcessor
include HasScope
include Scope
def process(scope_hash)
posts = apply_scopes(Post.all, scope_hash)
# ....
end
end