Ruby on rails 为什么我的视图代码同时使用实例变量和局部变量?
我正在看一本书的例子。在产品模型的“视图”部分,我看到了如下代码:Ruby on rails 为什么我的视图代码同时使用实例变量和局部变量?,ruby-on-rails,ruby,instance-variables,local-variables,Ruby On Rails,Ruby,Instance Variables,Local Variables,我正在看一本书的例子。在产品模型的“视图”部分,我看到了如下代码: <table> <% @products.each do |product| %> <tr class="<%= cycle ('list_line_odd', 'list_line_even') %>"> <td> <%= image_tag(product.image_url, class: 'list_image' %
<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而不是@products。有人能再解释一下吗?在您的示例中,@products是一个响应该方法的集合。实际上,这通常意味着一个数组。然后将@products的每个元素作为产品变量迭代地传递到一个块中
换句话说,product是执行循环时从@products中提取的单个元素。在您的示例中,@products是响应该方法的集合。实际上,这通常意味着一个数组。然后将@products的每个元素作为产品变量迭代地传递到一个块中
换句话说,product是执行循环时从@products中提取的单个元素。@products包含产品对象的集合。product变量包含product的一个实例。@products包含product对象的集合。product变量包含一个product实例。Ruby中有三种类型的变量:
- 常规变量,仅在示例代码中的
范围内可用产品
- 实例变量,在类的特定实例中可用。每个实例都有自己的实例变量集,在您的示例中为
@products
- 类变量,在类的所有实例中都可用。它们也可以直接访问(无实例),
(您没有这种类型的示例)@@variable
最后一行是
产品
,与@产品
是完全不同的变量@products
由控制器的类实例填充(可能称为ProductsController
)。它是一个产品列表,使用each()
方法迭代每个列表项。在迭代循环中,product
用于指定正在迭代的当前产品。Ruby中有三种类型的变量:
- 常规变量,仅在示例代码中的
范围内可用产品
- 实例变量,在类的特定实例中可用。每个实例都有自己的实例变量集,在您的示例中为
@products
- 类变量,在类的所有实例中都可用。它们也可以直接访问(无实例),
(您没有这种类型的示例)@@variable
最后一行是
产品
,与@产品
是完全不同的变量@products
由控制器的类实例填充(可能称为ProductsController
)。它是一个产品列表,使用each()
方法迭代每个列表项。在迭代循环中,product
用于指定正在迭代的当前产品。在控制器和视图的上下文中,您在控制器中声明实例变量(以@符号开头),以将它们传递给视图
开头没有@-符号的变量是仅在有限范围内可用的变量,例如迭代的元素
因此,您将@products从控制器传递到视图。之后,您可以使用product作为@products变量元素的临时标识符来迭代元素。在控制器和视图的上下文中,您可以在控制器中声明实例变量(以@符号开头),以将它们传递给视图 开头没有@-符号的变量是仅在有限范围内可用的变量,例如迭代的元素 因此,您将@products从控制器传递到视图。之后,您可以使用product作为@products变量元素的临时标识符来迭代元素