То, чего вы пытаетесь достичь, можно сделать так:
Item.where (: categoryor__id => c.id). первый
Item.where
возвращает область, фактически не создает и не выполняет запрос.
Методы first
и last
запустят запрос с LIMIT
и ORDER BY
и вернут элемент.
Методы типа each
и all
создают и запускают запрос и возвращают массив результатов.
Проверка кода
Код вашего контроллера подвержен внедрению SQL, изображение, если в session[:user_id]
было что-то злое. "#{stuff}"
не делает экранирования stuff
в Ruby.
Чтобы избавиться от проблемы с впрыском:
ruby
@categories = Category.where(:users_id => session[:user_id]) # Are you sure the column is not user_id but users_id?
Второе, что мы должны сделать, - это избегать выполнения N + 1 запроса, где N - количество результирующих категорий.
Хороший способ сделать это - использовать оператор SQL IN
.
ruby
@items = Item.where(:categorys_id => @categories.map(&:id)) #