class User < ActiveRecord::Base
  has_many :posts
end

class Question < ActiveRecord::Base
  belongs_to :user
  has_many :answers
end

class Answer < ActiveRecord::Base
  belongs_to :question
end

Используя Rails, как я могу:

1.Вернуть все users с помощью questions? например.

@users_with_questions = User.joins(:question).where.not(question: { id: nil })

2. Вернуть все users с помощью answers?

4
Jeremy Lynch 8 Сен 2016 в 09:01

3 ответа

Лучший ответ

1.Возврат всех пользователей с вопросами?

@users_with_questions = User.includes(:question).where.not(:question => {id: nil})

2.Возврат всех пользователей с ответами?

@users_with_answers = User.includes(question: :answer).where.not(:answer => {id: nil})
1
Jeremy Lynch 8 Сен 2016 в 06:23

Попробуй это:

children = Child.where( #something)
children_parents = Parent.joins(:children).where(children: {id: children} )

grandchildren = Grandchildren.where(#something)
grandchildren_parents = Parent.joins(children: :grandchildren).where(grandchildren: {id: grandchildren}) 

Так для вашего примера:

grandchildren_parents = Parent.joins(children: :grandchildren).where.not(grandchildren: {id: nil}).distinct

Или

grandchildren_parents = Parent.includes(children: :grandchildren).where.not(grandchildren: {id: nil})
0
Bartłomiej Gładys 8 Сен 2016 в 06:30

В рубине:

@users_with_questions = User.all.select{|u| u.questions.present? }
@users_with_answers   = User.all.select{|u| u.questions.present? && u.answers.present? }

class User < ActiveRecord::Base
  has_many :questions
  has_many :answers, :through => :questions
end

В одном запросе sql (всего один способ сделать это):

@users_with_questions = User.find(Question.pluck(:user_id).uniq!)
questions = Question.find(Answer.pluck(:question_id).uniq!)
@users_with_answers = User.find(questions.pluck(:user_id).uniq!)
0
Taryn East 8 Сен 2016 в 06:20