Možná budete chtít zkontrolovat možné způsoby, jak napsat tento druh dotazu v této odpovědi pro použití podmínek na více řádků ve spojení . Zde je jedna z možných možností implementace vašeho dotazu v Rails pomocí 1B, přístupu poddotazů...
Definujte dotaz v PostTag
model, který zachytí Post
Hodnoty ID pro danou Tag
jméno:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Definujte dotaz v Post
model, který zachytí Post
záznamy pro danou Tag
název pomocí struktury dílčího dotazu:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Pak můžete použít dotaz jako tento:
Post.for_tag("basil").for_tag("tomato")