2017-10-01 3 views
0
class Movie 
    has_many :movie_genres 
    has_many :genres, through: :movie_genres 
end 

Ich möchte grundsätzlich Filme finden, die nicht "kurz" sind.Wie rails oder sql verwenden, um über has_many association abzufragen?

Ich versuchte joins(:genres).where('genres.name is not ?', 'Short'), aber scheint Filme, deren erstes Genre ist nicht "Short" statt.

+0

Gibt es eine Beziehung, die zwischen Film und MovieGenre? Sobald Sie die Zuordnung zwischen MovieGenres und Movie, dann können Sie 'Joins (: Genres) .where ('genres.name ist nicht?', 'Kurz')' –

+0

@NarenSisodiya ja, bearbeitet. auch diese Lösung funktioniert nicht in diesem Spiel, aus irgendeinem Grund, es filtert nur Filme, wo das erste Genre ist "Short" – user2167582

Antwort

1

Zuerst müssen Sie alle Filme, die Genre als "Kurz" haben, und dann diese Filme von der endgültigen Liste ausschließen. Probieren Sie etwas wie folgt vor:

Movie.where.not(id: Movie.joins(:genres).where('genres.name = ?', 'Short').pluck(:id)) 
+0

nett, das funktioniert, aber ich hatte gehofft, es aus dem Weg in einem schöneren Format zu bekommen. – user2167582

0

können Sie verwenden, in denen mit nicht unten mögen

Movie.joins(:genres).where.not('genres.name = ?', 'Short') 
Verwandte Themen