У меня есть структура, которая на самом деле не является примером has_many :through
, но я бы хотел, чтобы она велась так:
# user.rb
belongs_to :blog
has_many :posts
# post.rb
belongs_to :user
# blog.rb
has_many :users
has_many :posts, :through => :users # this obviously doesn't work becase
# both FKs aren't in the blogs table
Я хочу получить ВСЕ посты для блога в массиве,Я знаю, что я могу сделать это с Ruby, используя each
или получая фантазию с collect
, но я бы хотел, чтобы SQL выполнял эту работу.
Может кто-нибудь объяснить, как я могу настроить свои модели таким образом, чтобы я мог называть @ blog.posts с использованием SQL и Ruby, и объяснить, какой путь «лучше»?
Edit:
Я знаю, что в SQL я могу написать что-то вроде:
SELECT * FROM posts WHERE posts.user_id IN (
SELECT users.id FROM users WHERE users.blog_id = 7
)
, что, очевидно, показывает, что необходимы два запроса.Я не думаю это возможно с join
, но я не совсем уверен.Очевидно, что подзапрос необходим, но как мне получить рельсы для создания этого подзапроса с ARel вместо того, чтобы возвращать и использовать Ruby для зацикливания и сбора и тому подобное?