Ich möchte Benutzern meiner Anwendung die Möglichkeit geben, unerwünschte Micropros von ihren Microposts zu entfernen. Standardmässig ist der microposts' Feed der eigenen microposts des Benutzers gemacht und die microposts von gefolgt Benutzer:Subtrahieren Sie zwei ActiveRecord :: Relation-Objekte
def feed
following_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
Micropost.where("user_id IN (#{following_ids})
OR user_id = :user_id", user_id: id)
end
Ich habe ein Quarantine
Modell, bei dem Benutzer und unerwünschte microposts zugeordnet sind. Dann suchte ich nach einer ActiveRecord::Relation
Methode, die mir erlaubt, aus den obigen where
folgenden where
zu subtrahieren:
microposts_ids = "SELECT micropost_id FROM quarantines
WHERE user_id = :user_id"
Micropost.where("micropost_id IN (#{microposts_ids})", user_id: id)
ich keine Methode gefunden, die die -
Arrays Betreiber entsprechen. Jedoch fand ich Methode merge
in einem Stackoverflow Frage: Combine two ActiveRecord::Relation objects, dass, soweit ich verstanden, mich zu Kette erlauben würde, die wheres
wie folgt:
Micropost.where("user_id IN (#{following_ids}) OR user_id = :user_id", user_id: id).merge(Micropost.where.not("micropost_id IN (#{microposts_ids})", user_id: id))
Der Unterschied ist, dass ich die zweite where
in eine where.not
geändert.
Das Problem mit dieser Lösung ist, dass die where.not
alle MicroPosts laden würde, die nicht unter Quarantäne gestellt werden, was eine schwerere Aufgabe für die Datenbank ist, als nur die Quarantäne-Mikroposten zu laden. Gibt es eine alternative Lösung für die merge
-Methode, z. B. eine Methode, die die Quarantäne-Mikroposten vom ursprünglichen Feed subtrahiert?
Ich bin mir nicht sicher, ob die Definition von 'micropros_not_to_show' korrekt ist: Es sollte ein Micropost-Objekt und kein Quarantine-Objekt zurückgeben: Das wher-Argument enthält ein Quarantäne-Objekt. – Asarluhi
Wir schließen uns den Tabellen an. Es wird kein Quarantine-Objekt angezeigt, bis es explizit mit der select-Methode angegeben wird. – moyinho20
Ich erhalte folgende Warnung: 'ActiveRecord :: StatementInvalid: PG :: UndefinedColumn: FEHLER: Spalte Quarantänen.User_ID existiert nicht'. – Asarluhi