Ruby on rails 如何使用Haml和ERB简洁地呈现集合?
在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
<%= 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