Я не нашел способов получить имя области напрямую из области видимости. Итак, я думаю, что самый простой способ решить вашу проблему:
(
[
{scope_name: :first, data: Article.pg_scope1(params[:query])},
{scope_name: :second, data: Article.pg_scope2(params[:query])},
{scope_name: :third, data: Article.pg_scope3(params[:query])}
]
).find { |scope| scope[:data].present? }
В этом случае вы получите один из хэшей с именем scope_name с данными внутри, например
=> {scope_name: :second, data: Article.pg_scope2(params[:query])}
или Вы можете использовать массив внутри массива
result = (
[
[:first, Article.pg_scope1(params[:query])],
[:second, Article.pg_scope2(params[:query])],
[:third, Article.pg_scope3(params[:query])],
].find {|scope| scope[1].present? }
)
и получить доступ к данным результата, вызвав result[1]
, а имя_области - result[0]