在特定视图的情况下隐藏部分按钮

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,尽管我们使用了其他动作的模板。