私は、現在のユーザが引用符を持たないすべてのリクエストを表示する必要のあるアプリを持っています。私は、他のユーザーからの引用を引用したり要求したりしていないRequestを見たいと思っています。私が使用している引用符なしの場合Railsコメントがないすべての投稿をcurrent_userで表示するクエリ
:
Request.includes(:quotes).where(quotes: { id: nil }).order(created_at: :desc)
とのため
私が使用した問合せでない場合は: はRequests.joins(:quotes).where.not(quotes: { service_center_id: current_service_center.id })
これは、1つの引用で動作します。私がリクエストを引用すると、そのリクエストはもはやリストにはなくなりますが、他の誰かがそれを引用するとすぐに、それが私のリストに戻ってきます。それは他の引用符が私によって引用されていない場合でも私が引用している場合でも、それが要求を表示するので、クエリが他の引用符を見ているかのように。
ここでは、それが私にモデルを調べるよう促したところではないThoughtbotブログへのリンクです。下に向かって彼は同じ質問をする。私は著者に電子メールを送ったが、まだ返信していない。 https://robots.thoughtbot.com/activerecords-wherenot
ここでは私のモデルは以下のとおりです。
ユーザー:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :first_name, presence: true
alidates :last_name, presence: true
validates :zipcode, presence: true
has_many :autos
has_many :requests
has_many :quotes, through: :requests
has_many :appointments, through: :quotes
要求:
belongs_to :user
belongs_to :auto
has_many :quotes, dependent: :destroy
has_many :appointments, through: :quotes
validates :service, presence: true
serialize :service
validates_associated :quotes
を引用:
belongs_to :request
belongs_to :service_center
Service_center:ここ
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :quotes
has_many :requests, through: :quotes
点検!私の質問の迅速な対応と再フォーマットに感謝します。 current.service_centerはますます重複した検索になります。または引用符からIDだけを引っ張ってもそれほど悪くはありません。私たちがすべてのデータを引っ張っているようなわけではありません。 –
このクエリは、引用符をRailsに送信していないため、多数の引用符があってもかなり効率的です。 'sql'や' .explain'を見るとかなり高速なクエリです。すべての作業がデータベース内で行われています。これは、 'NOT EXISTS()'サブクエリを持つクエリをWHERE句に書くのと同じです。 –
残念ながら、それは動作しませんでした、それは前のものと同じ結果を与えました。 Requestに複数の引用符がある場合、それは結果から除外されません。リクエスト115が3つの引用符を有し、そのうちの1つが現在の_service_centerからのものである場合、リクエスト115は実際には依然として表示されます。 –