ruby-on-rails - 在渲染中渲染?使用渲染 @product 渲染 @category
问题描述
我目前有一个菜单/商店首页,它呈现类别以及分配给该类别的产品下方。
但是,我也需要将其更改为渲染@类别和渲染@产品,但我不确定如何将它们相互链接并渲染分配给每个类别的类别的产品......
如果有人能告诉我这将如何工作,我将非常感激......
看法
<body class="font-sans container">
<div class="w-full md:w-3/5 mx-auto p-8">
<p> <strong>Drink</strong></p>
<div class="shadow-md">
<% cache @categories do %>
<% @categories.where(user_id: @account.id).each do |category| %>
<% cache category do %>
<div class="tab w-full overflow-hidden border-t">
<input class="absolute opacity-0 " id="tab-multi-<%= category.category%>" type="checkbox" name="tabs">
<label class="block p-5 leading-normal cursor-pointer" for="tab-multi-<%= category.category%>"> <%= category.category%> </label>
<% cache @products do %>
<% @products.where(user_id: @account.id, category: category, available: 't').each do |product| %>
<% cache product do %>
<div class="tab-content overflow-hidden border-l-2 bg-gray-100 border-indigo-500 leading-normal">
<ul class="flex flex-col p-2 ">
<li class="border-gray-400 flex flex-row mb-2">
<div class="lg:w-1/4 lg:mr-8 w-full select-none cursor-pointer bg-gray-100 rounded-lg flex flex-1 items-center p-4 transition duration-500 shadow ease-in-out transform hover:-translate-y-1 hover:shadow-lg">
<div class="flex-1 pl-1 mr-16">
<div class="font-semibold"><%= product.title %></div>
<div class="text-gray-600 font-medium text-sm maxlength="10>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
</div>
<div class="flex-2 pl-1 mr-0">
<div class="font-semibold"><%= product.price %></div>
<%= button_to '+', line_items_path(product_id: product), class:"text-black font-medium text-sm mt-8 px-4 py-2 bg-blue rounded-full" %>
<div id="<%= product.id %>"></div>
</div>
</div>
</li>
</ul>
</div>
<% end %>
<% end %>
<% end %>
</div>
<% end %>
<% end %>
<% end %>
</div>
</div>
</body>
控制器
> def menu
> @products = Product.order(:title)
> @categories = Category.order(:category)
> @account = User.find_by_id(params[:id])
> render layout: false end
解决方案
您可以使用部分来实现您正在寻找的东西。渲染局部变量时,可以传入局部变量,如下所示:
<%= render 'partial_location', local_variable: variable_name %>
在局部视图中,您可以variable_name
像这样访问局部变量:
<% variable_name.each do |variable| %>
'Do something with the variable'
<% end %>
推荐阅读
- css - 更新 Angular 后收到“不匹配的伪类:lang”
- javascript - 使用 React/NextJS useRef 切换网络摄像头视频失败
- nginx - nginx:不匹配正确的方法
- json - 尝试从 React 中的 API 获取数据 - TypeError:recipes.map 不是函数
- terminal - brew upgrade MacOs 11.3.1 错误信息 curl: (7) Failed to connect to ghcr.io port 443: Bad file descriptor
- nginx - 想在 Nginx 中将 https://www.example.org 转为 https://example.org
- spring - Swagger @ApiParam 中的示例属性不起作用
- python - 测试变量的类型或实例/值
- html - React native - 将 HTML 转换为 PNG 并下载 Base64
- javascript - 如何在 Material UI 中的 DataGrid 中对齐 raw 的中心?