Serializando escopos ActiveRecord

À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