Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用Haml和ERB简洁地呈现集合?_Ruby On Rails_Ruby On Rails 4_Haml - Fatal编程技术网

Ruby on rails 如何使用Haml和ERB简洁地呈现集合?

Ruby on rails 如何使用Haml和ERB简洁地呈现集合?,ruby-on-rails,ruby-on-rails-4,haml,Ruby On Rails,Ruby On Rails 4,Haml,在ERB视图中,您可以调用 <%= render @cart.line_items %> 从我到目前为止读到的内容来看,这看起来应该会产生相同的行为: = render 'line_items/line_item', collection: @cart.line_items, as: :item 但它仍然没有像预期的那样工作项未作为本地项传递: undefined local variable or method `item' for #<#<Class:0x007f

在ERB视图中,您可以调用

<%= render @cart.line_items %>
从我到目前为止读到的内容来看,这看起来应该会产生相同的行为:

= render 'line_items/line_item', collection: @cart.line_items, as: :item
但它仍然没有像预期的那样工作<代码>项未作为本地项传递:

undefined local variable or method `item' for #<#<Class:0x007fb3c531aee0>:0x007fb3c3692160>
未定义的局部变量或方法“item”#
Haml是否有一种相对简洁的方式来呈现集合(相对于ERB)?如果是这样的话,你有没有想过我可能会错过什么?或者是否有更好的方法来实现这一点

谢谢。

试试这个(明确提及部分)


渲染方法及其处理部分的方式是Rails的一部分,对于Erb和Haml应该是一样的

当使用
render
自动呈现集合时,如使用
render@cart.line_items
时,Rails将使用集合中每个条目的类名称来确定要使用的分部以及该分部中使用的局部变量的名称

在您的Erb示例中,Rails使用部分
\u line\u item.html.Erb
,这表明对象的类型为
LineItem
,因此Rails将创建一个名为
line\u item
的本地项目。但是,在Haml部分中,您使用的是名称
,该项未定义,因此出现错误

只需将部分中出现的
项目
更改为
行项目
,即可使用

=render@cart.line\u项目

在Haml中,与Erb中相同。

引用的
@cart.line\u items
模型类的名称是什么?
render
方法及其处理分部的方式是Rails的一部分,对于Erb和Haml应该是一样的。如果模型是
LineItem
,那么Rails将创建一个名为
line\u item
的局部变量,而不是在问题的其余部分使用的
item
。如果您将您的部分更改为使用
line\u items
而不是
item
,您可以在Haml中使用
=render@cart.line\u items
,与Erb中相同。这正是我想要的,谢谢。我一定是在做实验的时候忘记了那个更名。加一个答案,我就接受。
undefined local variable or method `item' for #<#<Class:0x007fb3c531aee0>:0x007fb3c3692160>
= render :partial => 'line_items/line_item', collection: @cart.line_items, as: :item