ile iki kapsam nasıl birleştirilir? Bir etiket feed'im ve bir arkadaş özet akışım var. Bu ikisini birleştirmek ve nihai "tüm" beslemeyi oluşturmak istiyorum. etiket besleme içinOR
class Post < ActiveRecord::Base
scope :friendfeed, lambda{|x| followed_by}
def self.followed_by(user)
where("user_id IN (?) OR user_id = ?", user.watched_ids, user.id)
end
end
: Arkadaşımız için
beslemek
class Post < ActiveRecord::Base
scope :tagfeed, lambda{|x| infatuated_with}
def self.infatuated_with(user)
joins(:attachments).where("attachments.tag_id IN (?)", user.tags).select("DISTINCT pages.*")
end
end
Ve (ben sayfalandırmada Kaminari mücevher kullanıyorum) kumandadan böyle bir şey çağırır:
@tag_feed = Post.tagfeed(current_user).page(params[:page]).per(21)
@friend_feed = Post.friendfeed(current_user).page(params[:page]).per(21)
Şimdi evrensel bir beslemenin olmasını istiyorum, ancak kayboldum. Kapsamlar daraltmak içindir, ancak bu durumda bir VEYA işlemi yapmaya çalışıyorum.
@mother_of_all_feed = @tag_feed + @friend_feed
gibi şeyler yapmak gereksiz olurdu ve ben tek bir sayfada görünen mesajların sayısını kontrol etmek mümkün olmaz. Bunu yapmak için nasıl gidebilirim? Teşekkürler!
class Post < ActiveRecord::Base
has_many :attachments
has_many :tags, :through => :attachments
end
class Tag < ActiveRecord::Base
has_many :attachments
has_many :posts, :through => :attachments
end
class Attachment < ActiveRecord::Base
belongs_to :tag
belongs_to :post
end
Performansından memnun musunuz? Burada 4-5 sorgusu var gibi görünüyor. İki seçeneğiniz var gibi görünüyor: ham SQL-sorgu yaz veya en sevdiğim gem squeel'i kullan. OR gerçekleştirir ve iç içe SQL sorgusuna yol açan 'in 'özelliğini destekler. Bir göz atın: https://github.com/ernie/squeel. Http://stackoverflow.com/a/10551561/1322562 gibi birkaç kez "reklam vermeyi" denedim, ancak yalnızca birkaç kişi bunu beğendi. Nedenini merak ediyorum. Squeel ile kapsamlarınızı yeniden kullanabilir ve saf Ruby'de karmaşık sorgu oluşturabilirsiniz: “Product.where” (id.in Product.ruby) | (id.in Product.rails)} 'tek (!!!) SQL sorgusu ile ! – jdoe
Memnun değil, sadece prototip yapıyordum, bu yüzden sorun yok. Squeel'e bir bakacağım. Teşekkürler! – Vlad