【问题标题】:Ruby on Rails Session Variable not Showing on Front End on First RenderRuby on Rails 会话变量在第一次渲染时未显示在前端
【发布时间】: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


    【解决方案1】:

    我想通了。作为 params_valid 的一部分?方法我正在执行以下操作:

      values_hash[:top_id] = params[:top_id].to_i
      values_hash[:filling_id] = params[:filling_id].to_i
      values_hash[:bottom_id] = params[:bottom_id].to_i
    

    我在 session[:box] 上添加了一个 logger.debug 并得到以下信息:

    {"top_id"=>1, "filling_id"=>1, "bottom_id"=>1, "id"=>1}
    {"top_id"=>1, "filling_id"=>1, "bottom_id"=>1, "id"=>2}
    {"top_id"=>1, "filling_id"=>1, "bottom_id"=>1, "id"=>3}
    {"top_id"=>1, "filling_id"=>1, "bottom_id"=>1, "id"=>4}
    {:top_id=>1, :filling_id=>1, :bottom_id=>1, :id=>5}
    

    您会注意到最后一行的差异。我将上面的代码更改为以下代码并且它起作用了:

      values_hash["top_id"] = params[:top_id].to_i
      values_hash["filling_id"] = params[:filling_id].to_i
      values_hash["bottom_id"] = params[:bottom_id].to_i
    

    这件事很奇怪,我没听懂的原因是刷新页面时它调用了同一个 session[:box] 变量并且显示正常。必须在后台对会话变量进行一些处理才能对其进行整理。

    如果有人可以分享对此的一些见解,我会很感兴趣

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 2017-06-04
      • 1970-01-01
      • 2013-02-17
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多