2011-12-18 38 views
8

Tôi cần truy vấn tất cả các bài đăng từ một người dùng cụ thể và bao gồm tất cả nhận xét và người dùng thuộc về nhận xét.Đường ray bao gồm các mối quan hệ lồng nhau

class User < ... 
    has_many :posts 
    has_many :comments 
end 

class Post < ... 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ... 
    belongs_to :user 
    belongs_to :post 
end 

@posts = current_user.posts.include(:comments) 

Bạn cũng có thể nhận được người dùng nhận xét? Tôi liệt kê rất nhiều bài đăng và nhận xét. Tôi không muốn truy vấn từng người dùng nhận xét.

Thx/Tobias

Trả lời

26

Hãy thử

@posts = current_user.posts.includes(:comments => :user) 

đọc thêm về nó here

+1

Có thể giới hạn nhận xét trong truy vấn này. Tôi chỉ muốn có 5 ý kiến ​​mới nhất được đưa vào. Nếu tôi lặp lại shout.comments.limit (5) truy vấn mới chạy – sandelius

+1

Trong câu trả lời của tôi: 'Bài viết has_many: nhận xét,: include => [: user],: limit => 5' – clyfe

+0

Yeah nhưng tôi cũng không để tìm nạp tất cả nhận xét trên một trang hoặc thậm chí phân trang chúng? – sandelius

10

Làm thế nào về bao gồm ít báo cáo kết quả định nghĩa mối quan hệ?

: bao gồm
Chỉ định các liên kết thứ hai cần tải lên khi đối tượng này được tải.

class Post < 
    belongs_to :user 
    has_many :comments, :include => [:user], :limit => 5 
end 
+1

Dường như: không bao gồm một tùy chọn hợp lệ (ít nhất là không với Rails 4.1), có một sự lựa chọn khác không? – FeifanZ

+0

@FeifanZ nó phải là 'bao gồm'. Nó làm việc tốt rồi – ahnbizcad

Các vấn đề liên quan