2015-01-19 3 views
1

У меня есть следующие модели:Доступ массива записи корыта ассоциаций

class User < ActiveRecord::Base 
    has_many :questions 
    has_many :answers 

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

class Answer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question 

Я хотел бы получить доступ вопросов, на которые ответили пользователь. я мог бы сделать это следующим образом:

question_ids = [] 
@user.answers.each do |answer| 
    question_ids << answer.question.id 
end 
Question.where(id: question_ids) 

Есть ли лучший способ сделать это?

ответ

1

Другой вариант заключается в использовании pluck, чтобы избежать загрузки все ответы объекты в памяти:

Question.where(id: @user.answers.pluck(:question_id)) 
1

Вы можете использовать joins, как это:

Question.joins(:answers).where(answers: {user_id: @user.id}) 
Смежные вопросы