User
には多くのプロジェクトがあり、Project
には多くの役割があるアプリケーションに取り組んでいます。 Role
には、誰かがその役割を果たしたことを示すためのブール値filled
があります。モデルの子の属性に基づいてモデルのインスタンスを返すために、このRails/PostgreSQLクエリをどのように構造化できますか?
私はどちらかが何の役割を持っていないか、すべてのを埋めてきた役割を持っているすべてのプロジェクトを返すクエリを構築したいと思います。これは私がこれまで持っている最も近い:
@user.projects.includes(:roles).where("roles.id IS NULL OR roles.filled IS TRUE").references(:roles)
問題は、クエリのroles.filled IS TRUE
一部が充填され、充填されていない役割の混合物でプロジェクトをマッチングしていることです。 すべての役割が満たされているプロジェクトとのみ一致する必要があります。 bool_and
が進むべき道は、おそらくですが、私のSQLのスキルが大きくないと私はそれがまだ働いて得ることができていないよう
はPostgreSQLのドキュメントを検索する、それが見えます。
私はこれをselect
またはreject
で簡単に行うことができたが、データベースを照会するだけで効率的に保ちたいと思います。
誰かアドバイスをお願いいたします。
更新:(簡体字)のモデルとそれらの関係:
APP /モデル/ user.rb
class User < ActiveRecord::Base
has_many :projects
end
APP /モデル/ project.rb
class Project < ActiveRecord::Base
belongs_to :user
has_many :roles
end
app/models/role.rb
class Role < ActiveRecord::Base
belongs_to :project
# `filled` is a boolean attribute with a default value of false
end
は、だからあなた条件は、プロジェクトにはすべてのロールが埋め込まれている必要がありますか?お互いのモデルがどのように関連しているかを見せていただけますか? – lcguida
@lcguida質問にモデルを追加しました:) – Simon
私は答えましたが、正確であるようにすべてのroles.idがnullかany roles.idがnullである必要があるかどうかを知る必要があります。 – charlysisto