関連付けの数が0より大きいすべてのレコードを検索する 質問する

関連付けの数が0より大きいすべてのレコードを検索する 質問する

簡単だと思っていたことをやろうとしているのですが、そうではないようです。

空きポジションがたくさんあるプロジェクト モデルがあります。

class Project < ActiveRecord::Base

  has_many :vacancies, :dependent => :destroy

end

少なくとも 1 つの空きがあるすべてのプロジェクトを取得したいです。次のようなことを試しました:

Project.joins(:vacancies).where('count(vacancies) > 0')

しかし、

SQLite3::SQLException: no such column: vacancies: SELECT "projects".* FROM "projects" INNER JOIN "vacancies" ON "vacancies"."project_id" = "projects"."id" WHERE ("projects"."deleted_at" IS NULL) AND (count(vacancies) > 0)

ベストアンサー1

1) 少なくとも 1 つの空きがあるプロジェクトを取得するには:

Project.joins(:vacancies).group('projects.id')

2) 空きが 1 つ以上あるプロジェクトを取得するには:

Project.joins(:vacancies).group('projects.id').having('count(project_id) > 1')

3) または、Vacancyモデルがカウンターキャッシュを設定する場合:

belongs_to :project, counter_cache: true

これも機能します:

Project.where('vacancies_count > ?', 1)

の語形変化の規則はvacancy手動で指定?

おすすめ記事