在特定视图的情况下隐藏部分按钮
Hiding a button in a partial in case of particular view
我正在开发一个基本上是在 Rails 上使用 Ruby 的在线商店的应用程序。我有 application.html.erb,它拿着篮子的一侧,与 Ajax 一起运行。单击结帐按钮后,它会重定向页面主体以获取新订单。我希望结帐按钮在显示该视图时消失。关于我该怎么做的任何想法?
遵循部分
的代码
views/baskets/_basket.html
<% unless basket.queue_groceries.empty? %>
<div class="basket"> Our basket</div>
<table>
<!-- START_HIGHLIGHT -->
<%= render(basket.queue_groceries) %>
<!-- END_HIGHLIGHT -->
<tr class="total_line">
<td colspan="2">Total</td>
<!-- START_HIGHLIGHT -->
<td class="total_cell"><%= number_to_currency(basket.total_price) %></td>
<!-- END_HIGHLIGHT -->
</tr>
</table>
<!-- START_HIGHLIGHT -->
<%= button_to 'Check out', new_order_path, method: :get %>
<%= button_to 'Empty basket', basket, method: :delete, confirm: 'Are you sure?' %>
然后是views/layouts/application.html.erb
<!-- START:head -->
<!DOCTYPE html>
<html>
<head>
<!-- START_HIGHLIGHT -->
<title>Pragprog Books Online Store</title>
<!-- END_HIGHLIGHT -->
<!-- <label id="code.slt"/> --><%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %><!-- <label id="code.jlt"/> -->
<%= csrf_meta_tags %><!-- <label id="code.csrf"/> -->
</head>
<!-- END:head -->
<body class="<%= controller.controller_name %>">
<!-- START_HIGHLIGHT -->
<div id="banner">
<%= image_tag("logo.png") %>
<%= @page_title || "Pragmatic Bookshelf" %><!-- <label id="code.depot.e.title"/> -->
</div>
<div id="columns">
<div id="side">
<div id="basket">
<%= render @basket %>
</div>
<ul>
<li><a href="http://www....">Home</a></li>
<li><a href="http://www..../faq">Questions</a></li>
<li><a href="http://www..../news">News</a></li>
<li><a href="http://www..../contact">Contact</a></li>
</ul>
</div>
<div id="main">
<!-- END_HIGHLIGHT -->
<%= yield %><!-- <label id="code.depot.e.include"/> -->
<!-- START_HIGHLIGHT -->
</div>
</div>
<!-- END_HIGHLIGHT -->
</body>
</html>
您可以通过以下检查来完成:
<%= button_to 'Check out', new_order_path, method: :get # create a button
unless controller.controller_name == 'orders' && # unless controller is orders
%w(new create).include?(controller.action_name) # AND actions include new and create
%>
%w(new create)
是 ['new', 'create']
数组的别名。我们检查它是否包含当前操作名称。如果是 - 我们不会显示按钮。
为什么包含创建操作:
当您在控制器中的 create
操作失败时,您调用 render :new
,它不会将您重定向到新操作,而只是呈现该模板。所以动作仍然是create
,尽管我们使用了其他动作的模板。
我正在开发一个基本上是在 Rails 上使用 Ruby 的在线商店的应用程序。我有 application.html.erb,它拿着篮子的一侧,与 Ajax 一起运行。单击结帐按钮后,它会重定向页面主体以获取新订单。我希望结帐按钮在显示该视图时消失。关于我该怎么做的任何想法? 遵循部分
的代码views/baskets/_basket.html
<% unless basket.queue_groceries.empty? %>
<div class="basket"> Our basket</div>
<table>
<!-- START_HIGHLIGHT -->
<%= render(basket.queue_groceries) %>
<!-- END_HIGHLIGHT -->
<tr class="total_line">
<td colspan="2">Total</td>
<!-- START_HIGHLIGHT -->
<td class="total_cell"><%= number_to_currency(basket.total_price) %></td>
<!-- END_HIGHLIGHT -->
</tr>
</table>
<!-- START_HIGHLIGHT -->
<%= button_to 'Check out', new_order_path, method: :get %>
<%= button_to 'Empty basket', basket, method: :delete, confirm: 'Are you sure?' %>
然后是views/layouts/application.html.erb
<!-- START:head -->
<!DOCTYPE html>
<html>
<head>
<!-- START_HIGHLIGHT -->
<title>Pragprog Books Online Store</title>
<!-- END_HIGHLIGHT -->
<!-- <label id="code.slt"/> --><%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %><!-- <label id="code.jlt"/> -->
<%= csrf_meta_tags %><!-- <label id="code.csrf"/> -->
</head>
<!-- END:head -->
<body class="<%= controller.controller_name %>">
<!-- START_HIGHLIGHT -->
<div id="banner">
<%= image_tag("logo.png") %>
<%= @page_title || "Pragmatic Bookshelf" %><!-- <label id="code.depot.e.title"/> -->
</div>
<div id="columns">
<div id="side">
<div id="basket">
<%= render @basket %>
</div>
<ul>
<li><a href="http://www....">Home</a></li>
<li><a href="http://www..../faq">Questions</a></li>
<li><a href="http://www..../news">News</a></li>
<li><a href="http://www..../contact">Contact</a></li>
</ul>
</div>
<div id="main">
<!-- END_HIGHLIGHT -->
<%= yield %><!-- <label id="code.depot.e.include"/> -->
<!-- START_HIGHLIGHT -->
</div>
</div>
<!-- END_HIGHLIGHT -->
</body>
</html>
您可以通过以下检查来完成:
<%= button_to 'Check out', new_order_path, method: :get # create a button
unless controller.controller_name == 'orders' && # unless controller is orders
%w(new create).include?(controller.action_name) # AND actions include new and create
%>
%w(new create)
是 ['new', 'create']
数组的别名。我们检查它是否包含当前操作名称。如果是 - 我们不会显示按钮。
为什么包含创建操作:
当您在控制器中的 create
操作失败时,您调用 render :new
,它不会将您重定向到新操作,而只是呈现该模板。所以动作仍然是create
,尽管我们使用了其他动作的模板。