Smart Segments
How to migrate
Structure
Performance
Example
class Forest::Product
include ForestLiana::Collection
collection :Product
segment 'Bestsellers' do
query = <<~SQL
SELECT products.id, COUNT(orders.*)
FROM products
JOIN orders ON orders.product_id = products.id
GROUP BY products.id
ORDER BY count DESC
LIMIT 5;
SQL
products = ActiveRecord::Base.connection.execute(query)
{ id: products.map { |product| product['id'] } }
end
endmodule ForestAdminRails
class CreateAgent
def self.setup!
@create_agent.customize_collection('product') do |collection|
collection.add_segment('best_sellers') do |context|
rows = ActiveRecord::Base.connection.execute(
'SELECT products.id as product_id, COUNT(orders.id) as nb
FROM products
INNER JOIN orders ON orders.product_id = products.id
GROUP BY products.id
ORDER BY nb DESC
LIMIT 5;'
)
{
field: 'id',
operator: 'In',
value: rows.map { |r| r['product_id'] }
}
end
end
end
end
endLast updated