我正在阅读使用rails 4的Agile web developpment这本书。 有一个部分产品的购物车只显示它是否为空,我的问题是视图中的函数只发送给帮助者2个属性,而在实现中有3个参数。
在视图中我有下面的代码,它呈现给_cart,我有购物车秀
<%= hidden_div_if(@cart.line_items.empty?, id: 'cart') do %>
<%= render @cart %>
<% end %>
帮助者有:
module ApplicationHelper
def hidden_div_if(condition, attributes = {}, &block)
if condition
attributes["style"] = "display: none"
end
content_tag("div", attributes, &block) end
end
我的问题是&amp; block在这种情况下收到id:'cart'但它是一个可选的attibute?为什么它附带&amp ;.但是= =}}呢? 我真的不确定那是怎么回事,有人可以解释一下吗?
谢谢!
答案 0 :(得分:1)
do
和end
之间和之间的代码是块,这是hidden_div_if
的第三个参数,它只是传递给content_tag
。 &
定义中的hidden_div_if
会在您的视图中捕获该块,而&
调用中的content_tag
会再次展开它以传递它。
answer here通过几个例子很好地解释了这个想法。我建议您在irb
中自行测试所有内容,以便了解它。