Możesz przejrzeć możliwe sposoby napisania tego rodzaju zapytania w tej odpowiedzi dotyczącej stosowania warunków do wielu wierszy w połączeniu . Oto jedna z możliwych opcji implementacji zapytania w Railsach przy użyciu 1B, podejście podzapytania...
Zdefiniuj zapytanie w PostTag
model, który złapie Post
Wartości ID dla danego Tag
nazwa:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Zdefiniuj zapytanie w Post
model, który złapie Post
rekordy dla danego Tag
nazwa, używając struktury podzapytania:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Następnie możesz użyć zapytania w ten sposób:
Post.for_tag("basil").for_tag("tomato")