【发布时间】:2016-08-09 11:19:15
【问题描述】:
我遇到了一个奇怪的问题,即第一次渲染部分时,会话数组中的最后一个值没有显示在前端。我正在使用 add_to_box 方法将一组值添加到名为“session[:box]”的会话变量中。然后我想用新的值列表更新前端的部分。
这是代码...(稍微清理一下)
控制器:
def add_to_box(values_hash)
session[:box] ||= []
if params_valid?(values_hash)
session[:box].push(values_hash)
respond_to do |format|
format.js
end
end
end
add_to_box.js.erb:
$("#box").html("<%= escape_javascript(render partial: 'box') %>");
部分_box.html.erb:
<ul>
<% session[:box].each do |m| %>
<li>
<%= "#{m['bottom_id']}, #{m['filling_id']}, #{m['top_id']}" %>
</li>
<% end %>
</ul>
控制台输出:
Started POST "/things/add_to_box" for ::1 at 2016-08-09 11:59:23 +0100
Processing by ThingController#add_to_box as JS
Rendered things/_box.html.erb (0.9ms)
Rendered things/add_to_box.js.erb (2.8ms)
Completed 200 OK in 17ms (Views: 8.2ms | ActiveRecord: 0.7ms)
第一次调用方法(值1,1,1),前端显示为:
∙ , ,
第二次调用该方法(值2,2,2),前端显示为:
∙ 1, 1, 1
∙ , ,
第三次调用该方法(值3,3,3),前端显示为:
∙ 1, 1, 1
∙2,2,2
∙ , ,
你得到了图片......基本上永远不会呈现最新的值。
但是如果我刷新页面,它会正确显示所有值:
∙ 1, 1, 1
∙2,2,2
∙ 3, 3, 3
我一开始以为可能是因为值没有及时保存,渲染是先发生的,但是它怎么知道在设置之前有一组新值呢?!
在这方面需要一些帮助
【问题讨论】:
标签: ruby-on-rails ruby ajax ruby-on-rails-4 session