Каков наилучший способ найти все продукты по массиву id? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь сделать возможным для незарегистрированного пользователя совершать покупки. Я использую куки для этого. Для просмотра корзины я использую:

  1. в контроллере: @cart_items = cookies[:cart_items].split(',')
  2. в поле зрения:
<% @cart_items.each do |cart_item| %>
<%= Product.find(cart_item).title %>
<%= Product.find(cart_item).price %>
<% end %>

но я думаю, что это не так хорошо .

Как лучше всего найти все товары по массиву идентификаторов?

Ответы [ 2 ]

1 голос
/ 17 января 2020

Cook ie разбор определенно не относится к представлению. И вы также должны вообще избегать запросов к базе данных в представлении. В идеале представление должно просто брать данные с контроллера и отображать их.

Также никогда не используйте .find в al oop. Это создаст запрос к базе данных для каждой итерации. Это также вызовет исключение ActiveRecord::RecordNotFound, если какой-либо из идентификаторов не найден в базе данных.

Итак:

@cart_items = Product.where(id: cookies[:cart_items].split(','))

Менее плох. Но вряд ли идеально, так как он не позволит вам справиться с количеством. Вместо этого вы можете сохранить JSON или создать «гостевую» запись корзины в базе данных.

1 голос
/ 17 января 2020

в контроллере делают это, поэтому вы готовите запрашиваемый в представлении

контроллер:

@cart_items = Product.where(:id => cookies[:cart_items].split(','))

и в представлении вы делаете это

<% @cart_items.each do |cart_item| %>
<%= cart_item.title %>
<%= cart_item.price %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...