Може да искате да прегледате възможните начини за писане на този вид заявка в този отговор за прилагане на условия към множество редове в присъединяване . Ето една възможна опция за внедряване на вашата заявка в 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")