0

我想要一段代码(一个购物车)显示在我的标题中的索引上,并显示 2 个控制器的页面,但不适用于我的应用程序的任何其他部分。

我目前的计划是将这段代码放在一个部分中,并且:

 = render partial 'layouts/cart' if the params[:controller] == "Products" || params[:controller] == "Categories"

有没有更好的办法?我正在使用 Rails 3.2

4

3 回答 3

1

我正在使用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
于 2013-03-26T14:27:04.987 回答
0

你在那里做的事情本质上没有任何问题,但如果你需要把它放在很多地方,它可能容易出错。

你可以离开

= render partial 'layouts/cart'

你想在哪里使用它并放置

if the params[:controller] == "Products" || params[:controller] == "Categories"

在部分中,因此您仅将逻辑保留在一个地方

于 2013-03-26T03:31:07.867 回答
0

您应该尝试将逻辑排除在您的视图之外(包括部分视图)。因此,最好的方法是将其卸载到帮助程序中。

助手/application_helper.rb

module ApplicationHelper
  def show_cart
    render 'layouts/cart' if ['Products', 'Categories'].include?(params[:controller])
  end
end

在视图中

<%= show_cart %>
于 2013-03-26T03:36:58.360 回答