这是我的第一个问题,所以我希望我能尽可能具体,但不要苛刻。
我正在使用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
答案 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 %>