0

在 Rails 4 jQuery 移动应用程序中,如果我在控制器中使用:

@sales = @bill.sales

@bill显示视图中,我有@bill详细信息,然后是@sales. 如果我然后添加销售但返回不同的视图,而不是账单显示,它会正确显示新销售的销售。如果我然后返回账单列表并选择账单显示,则销售被缓存而没有新添加。

添加新销售后我不重定向显示的原因是管理员、收银员或女服务员可能会添加销售,他们都有不同的权限和不同的控制器。只有管​​理员使用 Bills 控制器。

如果我使用

  @sales = Sale.where(:bill_id => @bill.id)

它始终显示正确更新的列表,并且不缓存最后的销售视图。

这是我的查看代码

<ul  data-role="listview" data-theme="e">

<li>Bill Number: <%= @bill.bill_number %></li>

  -- more bill stuff ...

</ul>

<div class="spacer"></div>

<% unless @sales.empty? -%>

  <ul  data-role="listview" data-theme="a">

  <% @sales.each do |sale| %>

     <li><%= sale.quantity %>&nbsp;<%= sale.item %>&nbsp;<%= sale.commission_staff %>&nbsp;<%= number_with_precision(sale.amount, :precision => 2) %></li>

  <% end %>

     <li>Total Amount: <%= number_with_precision(@sales_total, :precision => 2) %></li>

  </ul>

 <% end %>
4

1 回答 1

0

我相信这里的罪魁祸首是 jQuery Mobile 而不是 Rails。jQuery Mobile 使用 UI 技巧来加载多个“屏幕”,然后在用户单击时在它们之间切换,而不是在单击时加载每个“屏幕”。

所以不是 Rails 强加了某种缓存,而是你的浏览器自然缓存。当您返回账单列表时,整套屏幕(账单列表 + 每张账单)不会被刷新。如果您在账单列表上刷新,然后点击进入有新销售的账单,它是最新的吗?如果是这样,则 jQuery Mobile 会导致此问题。

要解决此问题,您应该在添加新账单时强制刷新,或者通过 Ajax 调用添加新的销售信息。

于 2013-06-23T07:32:03.627 回答