Внешнее левое соединение включает рельсы 3 - PullRequest
2 голосов
/ 21 марта 2012

Есть ли способ выполнить .include и указать внешнее левое соединение.

Первоначально:

@post = Post.includes(:comments).where("comments.spam = ?", false).where(:id => params[:id]).first
@comments = post.comments

Желание подражать:

@post = Post.find(params[:id])
@comments = post.comments.where(:spam => false)

За исключением использования include, он будет загружаться очень быстро (если, скажем, у меня было несколько постов).

Спасибо за помощь в продвинутом. Justin

1 Ответ

0 голосов
/ 06 августа 2013

Я бы сделал следующее:

class Post < ActiveRecord::Base
  has_many :comments

  has_many :non_spam_comments, :through => :comments, :conditions => {:spam => false} 
  has_many :spam_comments, :through => :comments, :conditions => {:spam => true}
end

Тогда вы сможете сделать:

@posts = Post.where(:user_id => current_user.id).includes(:non_spam_comments)
@posts.each do |post|
  post.non_spam_comments.each do |comment| 
    // Some comment operation
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...