我有一个包含以下代码的辅助方法。它是AJAX购物车的一部分,显示在网站的多个页面上
module CartsHelper
def switch_buttons
unless URI(request.referer).path==new_order_path && !current_page?(store_path) \
|| current_page?(new_order_path)
@checkout = true
else
@checkout = false
end
end
end
这是购物车部分视图
<h2> Your Cart</h2>
<table>
<%= render(cart.line_items)%>
<tr class ="total_line">
<td colspan="2">Total</td>
<td class="total_cell"><%= number_to_currency(cart.total_price)%></td>
</tr>
</table>
<% if switch_buttons %>
<%= button_to 'Checkout', new_order_path, method: :get %>
<%= button_to 'Empty cart', cart, method: :delete,
confirm: 'Are you sure?', remote: true %>
<% else %>
<%= button_to 'Cancel Order', store_path, method: :get %>
<% end %>
URI(request.referer).path在我的所有测试中都给出了一个错误的参数(预期的URI对象或URI字符串)错误。它适用于实际的浏览器。我猜这是因为测试没有实际通过url所以request.referer是零?有没有办法设置测试才能通过这段代码?
答案 0 :(得分:0)
两件事:
首先,这回答了你的主要问题:
How do I set HTTP_REFERER when testing in Rails?
其次,不会给出request.referer的设置。从上一页导航时,大多数浏览器都提供标题;大多数情况下,当您手动输入URL时。不能假设HTTP客户端总体上这样做,并且您必须准备从该属性获取nil。