Ich habe die unten TabellenFiltertabelle mit Tags versehen - aktiven Datensatz
- Benutzer
- Artikel
- Schlagworte (1 bis viele)
Schlagwörter sowohl für den Benutzer angewendet werden kann, und Artikel. (Benutzer-Tags sind Tags, die auf eine schwarze Liste gesetzt werden sollen - d. h. keine Artikel anzeigen, die mit Tags versehen sind, die von Benutzern gesendet wurden). Als solche haben sie die folgenden Spalten
- id
- taggable_type ('Artikel' oder 'Benutzer')
- Titel (string)
- markierbare id (die entsprechende Artikelnummer oder die Benutzer-ID)
Wenn der Benutzer eine Get-Anfrage ausführt, möchte ich ActiveRecord haben alle Artikel mit den bereitgestellten Benutzer Blacklisted Tags filtern.
i führen Sie die unten Betrieb eine Reihe von Benutzer die schwarze Liste gesetzt Tags
if user != nil
user_tags = user.tags
blacklisted_tags = []
user_tags.each do |user|
blacklisted_tags.push(user.title)
end
puts "\n \n \n user tags - #{blacklisted_tags} \n \n \n"
end
blacklisted_tags = ['foo','bar']
Ich scheine Active zu erhalten kann nicht bekommen, um richtig jeden Artikel herauszufiltern, mit einem der blacklisted_tags markiert.
das ist, was ich getan habe, so weit
negations[:tags] = "tags.title not in #{blacklisted_tags}"
@articles = Article.order(followed).left_outer_joins(:tags).where.not(negations)
ich die unten SQL-Fehler erhalten -
(Mysql2::Error: Unknown column 'articles.taggable_id' in 'where clause': SELECT `articles`.* FROM `articles` LEFT OUTER JOIN `tags` ON `tags`.`taggable_id` = `articles`.`id` AND `tags`.`taggable_type` = 'article' WHERE (`articles`.`taggable_id` != 'tags.title not in [\"foo\", \"bar\"]')
Wo ist Schienen immer die 'articles.taggable_id' aus?
Gibt es eine bessere Möglichkeit, dies zu erreichen?
aus irgendeinem Grund .. das scheint nur die Zeilen zu zeigen, die ich zeigen möchte nicht .. – Kannaj
dann negativ die Bedingung versuchen –