Може да искате да прегледате възможните начини за писане на този вид заявка в този отговор за прилагане на условия към множество редове в присъединяване . Ето една възможна опция за внедряване на вашата заявка в Rails с помощта на 1B, подходът на подзаявката...
Дефинирайте заявка в PostTag модел, който ще грабне Post ID стойности за даден Tag име:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Дефинирайте заявка в Post модел, който ще грабне Post записи за даден Tag име, използвайки структура на подзаявка:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
След това можете да използвате заявка като тази:
Post.for_tag("basil").for_tag("tomato")