我正在看一本书的例子。在Products模型的视图部分中,我看到了一些代码:
<table>
<% @products.each do |product| %>
<tr class="<%= cycle ('list_line_odd', 'list_line_even') %>">
<td>
<%= image_tag(product.image_url, class: 'list_image' %>
</td>
<td class ="list_description ">
<dl>
<dt> <%= product.title %> </dt>
请注意,顶部是使用 @products ,而表格中的最后一行使用产品而不是 @products 。有人能解释一下这个吗?
答案 0 :(得分:1)
在您的示例中, @products 是一个响应Enumerator#each方法的集合。实际上,这通常意味着一个数组。然后,您将 @products 的每个元素作为 product 变量迭代地传递到块中。
换句话说, product 是执行循环时取自 @products 的单数元素。
答案 1 :(得分:1)
@products包含Product对象的集合。 product变量包含Product的一个实例。
答案 2 :(得分:1)
Ruby中有三种类型的变量:
product
中可用@products
@@variable
(你没有这种类型的例子)最后一行显示product
,与@products
完全不同。 @products
由控制器的类实例填充(可能称为ProductsController
)。它是产品列表,each()
方法用于遍历每个列表项。在迭代循环中,product
用于指定正在迭代的当前产品。
答案 3 :(得分:1)
在控制器和视图的上下文中,您在控制器中声明实例变量(以@ -symbol开头),以将它们传递给视图。
开头没有@ -symbol的变量是仅在有限范围内可用的变量,例如迭代的元素。
所以你将@products从控制器传递给视图。之后,您可以使用product作为@products变量元素的临时标识符来遍历元素。