我想要一段代码(一个购物车)显示在我的标题中的索引上,并显示 2 个控制器的页面,但不适用于我的应用程序的任何其他部分。
我目前的计划是将这段代码放在一个部分中,并且:
= render partial 'layouts/cart' if the params[:controller] == "Products" || params[:controller] == "Categories"
有没有更好的办法?我正在使用 Rails 3.2
我想要一段代码(一个购物车)显示在我的标题中的索引上,并显示 2 个控制器的页面,但不适用于我的应用程序的任何其他部分。
我目前的计划是将这段代码放在一个部分中,并且:
= render partial 'layouts/cart' if the params[:controller] == "Products" || params[:controller] == "Categories"
有没有更好的办法?我正在使用 Rails 3.2
(我正在使用erb,我不知道haml,但想法应该可以简单地转移)
您可以使用content_for来解决您的问题。
将此代码添加到您希望购物车显示的视图文件中。
Products/show.html.erb Products/index.html.erb Categories/show.html.erb,Categories/index.html.erb(如您的问题)。
<% content_for :cart, render('layouts/cart') %>
现在调用:
<%= yield :cart %>
在您的application.html.erb中(或您希望购物车出现的任何地方)。
示例:
布局/应用:
<!DOCTYPE html>
<html>
<head>
<title>Testapp</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield :cart%>
<%= yield %>
</body>
</html>
产品/展示:
<% content_for :cart, render('layouts/cart') %>
<p>I have content_for call so my appilication.html will dispaly cart partial</p>
产品/索引:
<p>I don't have content_for call so my appilication.html will not dispaly cart partial</p>
布局/购物车:
<h1>Here I am!</h1>
访问产品索引路径将产生:
I don't have content_for call so my appilication.html will not dispaly cart partial
参观产品展示路径将产生:
Here I am!
I have content_for call so my appilication.html will dispaly cart partial
你在那里做的事情本质上没有任何问题,但如果你需要把它放在很多地方,它可能容易出错。
你可以离开
= render partial 'layouts/cart'
你想在哪里使用它并放置
if the params[:controller] == "Products" || params[:controller] == "Categories"
在部分中,因此您仅将逻辑保留在一个地方
您应该尝试将逻辑排除在您的视图之外(包括部分视图)。因此,最好的方法是将其卸载到帮助程序中。
module ApplicationHelper
def show_cart
render 'layouts/cart' if ['Products', 'Categories'].include?(params[:controller])
end
end
<%= show_cart %>