簡體   English   中英

Ruby on Rails會話變量在第一次渲染時未顯示在前端

[英]Ruby on Rails Session Variable not Showing on Front End on First Render

我遇到一個奇怪的問題,當第一次渲染局部圖像時,會話數組中的最后一個值未顯示在前端。 我正在使用add_to_box方法將一組值添加到稱為“ session [:box]”的會話變量中。 然后,我想用新的值列表更新前端的partial。

這是代碼...(略作消毒)

控制器:

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

我以為起初可能是因為這些值沒有及時保存並且渲染首先發生,但是后來又如何知道在設置它們之前有一組新的值呢?

需要一些幫助

我已經知道了。 作為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]變量並顯示正常。 要在后台清理會話變量,必須進行一些處理。

如果有人可以對此分享一些見識會很感興趣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM