【问题标题】:Hiding a button in a partial in case of particular view在特定视图的情况下部分隐藏按钮
【发布时间】:2015-03-03 11:39:14
【问题描述】:

我正在开发一个应用程序,它基本上是一个使用 Ruby on Rails 的在线商店。我有 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>

【问题讨论】:

标签: javascript ruby-on-rails ajax


【解决方案1】:

您可以通过以下检查来做到这一点:

<%= 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​​ 语法的知识。谢谢大佬。
  • 更新了错误消息渲染的答案。现在如果create 动作呈现错误消息和new 模板,它也将被隐藏。
  • 谢谢。这次效果很好。对不起我的无知但是你能分解这段代码并解释sintaxe是如何工作的吗?我真的很难理解,因为我对 Rails 和一般编程都很陌生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2019-11-14
  • 2014-01-21
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多