2016-11-30 3 views
0

Ich habe die unten TabellenFiltertabelle mit Tags versehen - aktiven Datensatz

  1. Benutzer
  2. Artikel
  3. 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

  1. id
  2. taggable_type ('Artikel' oder 'Benutzer')
  3. Titel (string)
  4. 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?

Antwort

1

Probieren Sie es:

@articles = Article.joins(:tags).where.not(tags: { title: blacklisted_tags}) 
+0

aus irgendeinem Grund .. das scheint nur die Zeilen zu zeigen, die ich zeigen möchte nicht .. – Kannaj

+0

dann negativ die Bedingung versuchen –

Verwandte Themen