【问题标题】:What is the best way to find all products by id array?通过 id 数组查找所有产品的最佳方法是什么?
【发布时间】:2020-01-18 01:35:25
【问题描述】:

我正在努力让未注册用户能够购物。 我为此使用cookies。 对于我使用的购物车视图:

  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 %>

但我觉得不太好。

按 id 数组查找所有产品的最佳方法是什么?

【问题讨论】:

  • 视图不应进行数据库查询。获取控制器中的产品并将其传递给您的视图。

标签: ruby-on-rails ruby cookies


【解决方案1】:

在控制器中执行此操作,以便您在视图中准备查询的对象

控制器:

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

在视图中你这样做

<% @cart_items.each do |cart_item| %>
<%= cart_item.title %>
<%= cart_item.price %>
<% end %>

【讨论】:

    【解决方案2】:

    Cookie 解析绝对不属于视图。而且您通常还应该避免在视图中查询数据库。理想情况下,视图应该只从控制器获取数据并显示它。

    也永远不要在循环中使用.find。它将为每次迭代创建一个数据库查询。如果在数据库中找不到任何 id,它也会引发 ActiveRecord::RecordNotFound 异常。

    所以:

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

    不那么糟糕。但并不理想,因为它不会让你处理数量。相反,您可以存储 JSON 或在数据库中创建“访客”购物车记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2013-12-08
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      相关资源
      最近更新 更多