9

Tôi đang xây dựng một dòng hoạt động công cộng, trong đó có một dòng suối trong các cách sau:Rails 3 bốc háo hức của sâu hiệp hội lồng nhau

  1. tài posted 3 phút trước
  2. tài đóng vai một bài

Tôi đang sử dụng đá quý public_activity để đạt được điều này.

Câu hỏi của tôi là liệu có cách nào để sử dụng includes cho chức năng polymorpic hay không.

Mã mà tôi hiện đang chạy như sau:

#app/models/post.rb 

class Post < ActiveRecord::Base 

    include PublicActivity::Common 

    attr_accessible :content, :visibility 

    validates_presence_of :content 

    belongs_to :postable, :polymorphic => true 
    has_many  :stars 

end 

#app/models/star.rb 
class Star < ActiveRecord::Base 

    include PublicActivity::Common 

    validate :duplicate_star 

     belongs_to :user 
    belongs_to :post 

private 
    def duplicate_star 
errors.add(:base, "Post already starred") if Star.exists?(:user_id => self.user, :post_id => self.post) 
    end 

end 


#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def index 
    @post = Post.new 
    @activities = PublicActivity::Activity.order("id desc").all.includes(:trackable, :owner) 
    end 
end 

Các theo dõi được có thể là một đường bưu điện hoặc một ngôi sao. Tôi có chức năng hiển thị để hiển thị cả hai. Vấn đề là, nếu tôi cố gắng một cái gì đó ra như {user} {đóng vai chính postcontent}, nó có phải nó theo cách này:

activity.trackable.post.content 

Vì vậy, kết quả này trong nhiều truy vấn, mỗi lần nó tìm thấy một bài. Làm cách nào để giải quyết vấn đề/tình huống này?

Xin cảm ơn trước.

Trả lời

3

Bạn không thể sử dụng cú pháp tải mong muốn chuẩn?

@activities = PublicActivity::Activity.order("id desc").includes(:owner, :trackable => {:post => :content}) 
+0

Dễ theo dõi cũng có thể chứa loại lớp polymorpic khác, whicj có thể không có: nội dung làm thuộc tính. – swaroopsm