我正在阅读 Agile Rails Web Dev 的书,到目前为止,我学到的部分内容比我们可以以字符串形式调用它们的名称,或者如果有一组对象,我们可以传递对象名称,rails 会发现它需要循环通过它作为一个集合。现在我看到了这段代码,突然间我所学到的一切都变得混乱了:
<%= render @cart %>
我的问题是它是什么@cart
,为什么不是'cart'
?我怎么会知道呢?
我正在阅读 Agile Rails Web Dev 的书,到目前为止,我学到的部分内容比我们可以以字符串形式调用它们的名称,或者如果有一组对象,我们可以传递对象名称,rails 会发现它需要循环通过它作为一个集合。现在我看到了这段代码,突然间我所学到的一切都变得混乱了:
<%= render @cart %>
我的问题是它是什么@cart
,为什么不是'cart'
?我怎么会知道呢?
我可能是错的,但我相信在幕后 Rails 会为任何有to_partial_path
方法的东西渲染一个部分。在这种情况下,我假设@cart
是一个 ActiveRecord 对象,并且所有 ActiveRecord 对象都响应to_partial_path
.
尝试将其添加到您的模板中并查看它的输出。它应该是您的部分路径。
<%= @cart.to_partial_path %>
Rails 指南建议,当您执行“渲染@cart”时,Rails 会内省@cart 的模型名称,并在当前视图路径中查找该名称的部分名称。
render :partial 的实现实际上是在传递的对象上调用 to_partial_path。默认情况下,用户对象将返回“用户/用户”。因此,我将检查 Cart 类是否实现 to_partial_path 以返回“布局/购物车”。