Похоже, вы не можете применить ограничение к :has_many
, когда хотите загружать ассоциации для нескольких записей.
Пример:
class Blog < ActiveRecord::Base
has_many :posts, :limit => 5
end
class Post < ActiveRecord::Base
belongs_to :blog
end
Это прекрасно работает для ограничения количества сообщений для одного блога:
ruby-1.9.2-p290 :010 > Blog.first.posts
Blog Load (0.5ms) SELECT `blogs`.* FROM `blogs` LIMIT 1
Post Load (0.6ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`blog_id` = 1 LIMIT 5
Однако, если вы попытаетесь загрузить все блоги инетерпеливо загружайте посты с ними:
ruby-1.9.2-p290 :011 > Blog.includes(:posts)
Blog Load (0.5ms) SELECT `blogs`.* FROM `blogs`
Post Load (1.1ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`blog_id` IN (1, 2)
Обратите внимание, что для второго запроса нет ограничений, и не может быть - это ограничило бы количество сообщений, возвращаемых 5, во всех блогах, что нена все, что вы хотите.
РЕДАКТИРОВАТЬ:
Взгляд на Rails документы подтверждает это.Вы всегда найдете эти вещи в ту минуту, когда вы их выяснили:)
Если вы хотите загрузить ассоциацию с указанным параметром: limit, она будет проигнорирована, возвращая все связанные объекты