在rails中隐藏按钮(使用Rails书的Agile Web开发)

时间:2012-11-13 18:28:02

标签: ruby-on-rails button controller agile hidden

这是我的第一个问题,所以我希望我能尽可能具体,但不要苛刻。

我正在使用Rails进行敏捷Web开发,并且对编程非常陌生。

我想在订单/新页面上隐藏“结帐”按钮,这样就无法对用户购买产生任何麻烦。

目前,我并不真正理解实例变量是如何工作的,因为无论我在哪里声明我的实例变量,在视图中或在ordercontroller #new中,它总是验证为true。

这似乎是这种情况,因为当我在视图中使用实例变量来隐藏div(使用hidden_​​div_if(condition == true))时,按钮总是被隐藏!

不仅如此,而且当我这样做时:

<%= hidden_div_if( @hide_checkout_button == false ) do %>
<td><%= button_to 'Empty cart', cart, :method => :delete,
                  :confirm => 'Are you sure?' %></td>
<% end %>
<%= hidden_div_if( @hide_checkout_button == true ) do %>
  <td><%= button_to "Checkout", new_order_path, :method => :get %></td>
<% end %>

两个按钮都隐藏了!怎么会这样!?!

在这个例子中,我已将变量声明放在views \ orders_form.html.erb中:

<%= @hide_checkout_button = true %>
<%= form_for(@order) do |f| %>
  <% if @order.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@order.errors.count, "error") %> 
        prohibited this order from being saved:</h2>

      <ul>
        <% @order.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    ...

这是一个讨论论坛,提供解决此问题的方法,但它们对我不起作用,我不知道原因:http://pragprog.com/wikis/wiki/Pt-G-2/version/35

以下是问题本身:

  

如果您单击侧边栏中的“结帐”按钮会发生什么情况   结帐屏幕已经显示?你能找到一种禁用方法吗?   这种情况下的按钮? (提示:控制器中设置的变量   可用于布局和部分以及直接渲染   模板。)

如果您需要更多信息可以提问,我不太确定要提供多少详细信息或重要信息。

提前致谢: - )

def new
    @cart = current_cart
    if @cart.line_items.empty?
      redirect_to store_url, :notice => "Your cart is empty"
      return
    end

    puts 34
    @hide_checkout_button = true
    @order = Order.new
    puts 37

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @order }
    end
  end
  

在2012-11-13 20:33:40 +0000开始获取127.0.0.1的“/assets/logo.png”   服务资产/logo.png - 304未修改(1ms)   [2012-11-13 20:33:40]警告无法确定响应正文的内容长度。    设置响应的内容长度或设置Response#chunked = true   *   34   37   *   /命令/新

     

在2012-11-13 20:33:49 +0000开始获取127.0.0.1的“/ orders / new”   由OrdersController处理#new为HTML     ←[1m←[36mCart负载(1.0ms)←[0m←[1mSELECT“推车”。*从“推车”WHERE“推车   “。”id“=?LIMIT 1←[0m [[”id“,63]]     ←[1m←[35m(1.0ms)←[0m SELECT COUNT(*)FROM“line_items”WHERE“line_items”。“c   art_id“= 63

1 个答案:

答案 0 :(得分:0)

问题是缺少=。改为<%= %>

<%= hidden_div_if( @hide_checkout_button == true ) do %>
  <td><%= button_to "Checkout", new_order_path, :method => :get %></td>
<% end %>

此外,对于布尔检查,您可以if(boolean)进行评估,就像放置== true / false

一样
<%= hidden_div_if( @hide_checkout_button) do %>
   #...
<% end %>

您希望在调用视图的方法上设置该变量。在这种情况下,它是new

中的OrdersController方法
def new
  @hide_checkout_button = true
end

修改

将此添加到隐藏的div只是为了查看是否有助于找到将属性设置为

的元素
<%= hidden_div_if(@hide_checkout_button, id: 'cart') do %>

with(在应用程序助手中)

def hidden_div_if(condition, attributes = {}, &block 
  if condition
    attributes["style"] = "display: none" 
  end
  content_tag("div", attributes, &block)
end

如果不这样做,那就这样做吧

<% if @hide_checkout_button %>
  <td><%= button_to "Checkout", new_order_path, :method => :get %></td>
<% else %>
  <td><%= button_to 'Empty cart', cart, :method => :delete, :confirm => 'Are you sure?' %></td>
<% end %>