2011-07-16 17 views
16

Örneğin, bir blog nesnesine sahibim ve bu blogun birçok gönderi var. İlk blog nesnesinin hevesli yüklemesini yapmak ve ilk 10 mesajını söylemek istiyorum. Şu anda @blogs = Blog.limit(4) ve sonra görünümünde @blogs.posts.limit(10) kullanın. Bunu, Blog.include(:posts).limit(:posts=>10) gibi bir yolla yapmak için daha iyi bir yol olduğundan eminim. Dahil edilen nesnelerin sayısını sınırlamak mümkün değil mi, yoksa burada temel bir şey eksik mi? YapabileceğinizRaylar 3 Sınırlama İçerilen Nesneler

class Blog < ActiveRecord::Base 
    has_many :included_posts, :class_name => 'Post', :limit => 10 
    has_many :posts 
end 

Öyleyse:

+0

iade edilecektir Bkz. Http://stackoverflow.com/questions/6076392/limit-the-number-of-objects-returned-in-a-has-many – Thilo

+0

Tek, Bu yaklaşımı Rails'de çalışmaya bile başlayamıyorum (3.1)) konsolu. has_many: recent_posts,: class_name => 'Post',: limit => 3' eklendi. Ama ne zaman Blog.includes (: mesajlar) .first 'Ben hala sadece ilk 3 tüm yayınları var. – loneaggie

+0

Blog'u deneyin.includes (: recent_posts) .first.recent_posts – Thilo

cevap

2

Böyle Blogunuza modelinde yayın sayısını sınırlamak gerekir Eğer :has_many için bir sınır uygulayamaz gibi

$ Blog.first.included_posts.count 
=> 10 
$ Blog.first.posts.count 
=> 999 
+0

Ancak bu, blog başına toplam yayın sayısını sınırlamaz mı? – loneaggie

+0

Doğru, ancak birden çok tane ilişkilendirmesi oluşturabilirsiniz. Kodu gör. – s84

+0

Bunun nasıl çalıştığını görüyorum, ancak blog nesnesini de sorguya geri almak mümkün mü? '@blogs = Blog.limit (3) .recent_posts' aslında bana bir Mesajlar dizisi veriyor, ancak ilk ana blog'u değil. Eğer herhangi bir anlam ifade ediyorsa, db/query kullanımımı optimize etmeye çalışıyorum. – loneaggie

10

görünüyor Birden fazla kayıt için istekli yükleme dernekleri.

Örnek:

Bu, tek bir blog için mesajların sayısının sınırlandırılması için çalışıyor
class Blog < ActiveRecord::Base 
    has_many :posts, :limit => 5 
end 

class Post < ActiveRecord::Base 
    belongs_to :blog 
end 

: Tüm bloglar ve istekli yükü onlarla mesajlar yüklemeye çalışırsanız,

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 

Ancak :

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) 

İkinci sorguda sınır olmadığını unutmayın, ve orada olamaz - sınırlar Tüm bloglarda 5'e geri gönderilen mesaj sayısı, istediğiniz gibi değildir.

DÜZENLEME:

Rails docs bir bakış bu doğruluyor. Her zaman bu şeyler size :) onları çözdüm dakika bulmak

Eğer belirli bir ile bir dernek istekli yük: Limit seçeneğinde, bu göz ardı tüm ilgili nesneleri

+3

Raylar 4 için: has_many: mesajlar, -> {limit 5} – quatermain