Часть проблемы здесь - ваш первый запрос: Follow.where(...)
возвращает область, он не будет выполнять запрос, пока вы не попытаетесь получить доступ к объекту @follows
.Вероятно, это не имеет большого значения, но вы, вероятно, должны сделать это следующим образом (если вы не собираетесь динамически добавлять дополнительные условия):
@follows = Follow.where("admin_user_id = ?", session[:id]).all
Это гарантирует, что @follows является массивом объектов Follow.Поскольку это массив (а не один Follow
), в нем нет assignment_id.Измените ваш второй запрос следующим образом:
@assignments = Assignment.where(:id => @follows.map{|f| f.assignment_id}).all
По сути, .map
возвращает массив возвращаемых значений блока вместо исходного объекта, для которого он был вызван, то есть вместо массива последующих онвозвращает массив идентификаторов присваивания каждого объекта.Когда вы передаете этот массив как условия, он генерирует SQL-запрос наподобие:
select * from assignments where id IN (1, 2, 3)
, если у ваших подписчиков есть идентификаторы присваивания 1, 2 и 3.