例如,我有一個博客對象,並且該博客有許多帖子。我想做第一個博客對象的急切加載,幷包括它的前10個帖子。目前我會做@blogs = Blog.limit(4)
,然後在視圖中使用@blogs.posts.limit(10)
。我很確定有一個更好的方法可以通過包括Blog.include(:posts).limit(:posts=>10)
在內的方式來實現。是不是可以限制包含的對象的數量,還是我缺少一些基本的東西?Rails 3限制對象
16
A
回答
2
您需要限制的職位數在您的博客模式是這樣的:
class Blog < ActiveRecord::Base
has_many :included_posts, :class_name => 'Post', :limit => 10
has_many :posts
end
,那麼你可以這樣做:
$ Blog.first.included_posts.count
=> 10
$ Blog.first.posts.count
=> 999
10
看起來就像你不能限制適用於: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 docs證實了這一點。你總能找到這些東西你想通出來:)分鐘
如果你渴望負載與指定的關聯:限制選項,它 會被忽略,返回所有關聯的對象
+3
For Rails 4:has_many:posts, - > {limit 5} – quatermain
相關問題
- 1. Rails 3:限制多對多關係
- 2. Rails 3 ActiveRecord抽象對象
- 3. Rails 3 - find_all_by_car_id和nil對象
- 4. Rails 3:驗證對象
- 5. Rails 3 - 限制文章標籤
- 6. Rails 3:如何限制對ID的訪問
- 7. 限制對象的旋轉?
- 8. 限制對象修改
- 9. 對象屬性限制 - jena
- 10. .NET對象大小限制
- 11. Ajax XMLHttpRequest對象限制
- 12. 按對象限制NSRegularExpression
- 13. Protégé對象屬性限制
- 14. 將select_tag列表限制爲僅屬於rails中另一個對象的對象
- 15. 使用Ruby On Rails 3複製對象屬性
- 16. Mongoid:限制嵌入對象的數量
- 17. 在rails 3中格式化JSON對象
- 18. Rails 3對象爲零或不創建
- 19. Rails 3渲染部分零對象
- 20. Rails 3創建默認嵌套對象
- 21. 耙耙銷燬Rails 3對象?
- 22. Rails 3 HABTM產生ActiveRecord :: Associations :: CollectionProxy對象
- 23. Rails 3對象#請嘗試不工作?
- 24. rspec&rails 3找不到模型對象
- 25. Rails 3:使用collection_select添加對象
- 26. Rails 3嵌套形式 - 新對象
- 27. Rails 5 - 限制關聯對象的選擇
- 28. Rails 3.1限制用戶創建的對象
- 29. 如何限制params Rails傳遞給一個對象?
- 30. ASP.NET MVC中對ModelState.IsValid的限制3
看到http://stackoverflow.com/questions/6076392/limit-the-number-of-objects-returned-in-a-has-many – Thilo
奇怪的是,我甚至不能在Rails中使用這種方法(3.1 ) 安慰。添加'has_many:recent_posts,:class_name =>'發佈',::限制=> 3'。但是,當我做'Blog.includes(:posts).first'我仍然得到所有帖子不只是第一個3. – loneaggie
嘗試Blog.includes(:recent_posts).first.recent_posts – Thilo