Ich habe eine App, die ich brauche, um alle Anfragen zu sehen, die keine Anführungszeichen vom aktuellen Benutzer haben. Ich möchte Anfragen sehen, die keine Anführungszeichen und Anfragen mit Anführungszeichen anderer Benutzer enthalten.Rails Query, um alle Beiträge anzuzeigen, die keine Kommentare von current_user haben
Für keine Zitate Ich habe mit:
Request.includes(:quotes).where(quotes: { id: nil }).order(created_at: :desc)
und für das Wo Nicht Abfrage war ich mit:
Requests.joins(:quotes).where.not(quotes: { service_center_id: current_service_center.id })
Das funktioniert mit einem Zitat. Wenn ich auf eine Anfrage zitiere, ist die Anfrage nicht länger in der Liste, aber sobald jemand anderes zitiert, kommt sie wieder in meine Liste. Es ist, als ob die Abfrage die anderen Zitate nicht von mir sieht, also wenn die Anfrage angezeigt wird, obwohl ich auch zitiert habe.
Hier ist ein Link zu einem Thoughtbot-Blog, wo mich das nicht inspiriert hat, in Models zu suchen. Nach unten macht er dieselbe Abfrage. Ich habe dem Autor eine E-Mail geschickt, aber noch nicht geantwortet. https://robots.thoughtbot.com/activerecords-wherenot
Hier sind meine Modelle:
Benutzer:
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
Anfrage:
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
Zitat:
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
Überprüfung! Danke für die schnelle Antwort und Neuformatierung meiner Frage. Wenn das current.service_center immer mehr Anführungszeichen erhält, wird dies zu einer starken Suche werden. oder vielleicht nur die IDs aus Anführungszeichen zu ziehen ist nicht so schlecht. Es ist nicht so, dass wir alle Daten ziehen. –
Diese Abfrage ist selbst bei einer großen Anzahl von Anführungszeichen ziemlich performant, da sie die Angebots-IDs nicht an Rails sendet. Wenn Sie die 'sql' oder' .explain' betrachten, ist das eine ziemlich schnelle Abfrage. Die ganze Arbeit geschieht in der Datenbank. Dies entspricht dem Schreiben einer Abfrage mit einer Unteranfrage 'NOT EXISTS()' in der Klausel 'WHERE'. –
Leider hat es nicht funktioniert, es gab die gleichen Ergebnisse wie die vorherige. Wenn die Anfrage mehrere Angebote enthält, schließt sie dies nicht aus den Ergebnissen aus. Wenn die Anfrage 115 aus 3 Anführungszeichen besteht und eine davon aus dem aktuellen _Service_center stammt, wird die Anfrage 115 tatsächlich noch angezeigt. –