Это начало происходить после обновления с Rails 3 до Rails 5 (с использованием activemodel 5.2.4.1 с Postgresql). Единственное, что я внес в это изменение, - это добавление Arel. sql () в необработанные части запросов. Не уверен, почему он ломается сейчас со следующей ошибкой:
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "community"
LINE 7: ...hived" = $1 GROUP BY community.id) subquery WHERE "community...
^
: SELECT COUNT(*) FROM (SELECT 1 FROM "community" LEFT OUTER JOIN ( SELECT people.community_id,
COUNT(people.id) as count,
SUM(people.amount) as sum
FROM people
WHERE people.status = 'processed'
GROUP BY people.community_id )
AS all_people ON all_people.community_id = community.id WHERE "community"."archived" = $1 GROUP BY community.id) subquery WHERE "community"."archived" = $2):
Запрос в модели:
scope :index_community, -> () do
all.joins(Arel.sql("
LEFT JOIN ( SELECT people.community_id,
COUNT(people.id) as count,
SUM(people.amount) as sum
FROM people
WHERE people.status = 'processed'
GROUP BY people.community_id )
AS all_people ON all_people.community_id = community.id
")).select(Arel.sql("
community.*,
SUM(all_people.count) as number_of_people
")).group('community.id')
end
в контроллере:
per_page = 30
query = Community.index_community
@communities = query.page(params[:page]).per(per_page)
@next_page = query.page(params[:page]).per(per_page).next_page
@previous_page = query.page(params[:page]).per(per_page).prev_page
@total_count = @communities.total_count
в индексе. json .jbuilder:
json.results @communities do |community|
json.name community.name
json.number_of_people community.number_of_people.to_i
json.action do
json.edit edit_admin_community_path(community)
json.view admin_community_path(community)
json.delete admin_community_path(community)
end
end
json.next_page @next_page
json.previous_page @previous_page
json.total_page @total_count
Я могу использовать методыless_count () на next_page и prev_page, но это не помогает с total_count.