2016-08-09 11 views
0

部分配列が初めてレンダリングされるときに、セッション配列の最後の値がフロントエンドに表示されないという奇妙な問題が発生します。私は、add_to_boxメソッドを使用して、 'session [:box]'というセッション変数に一連の値を追加しています。私はフロントエンドの部分を新しい値リストで更新したいと思っています。ここで Ruby on Railsセッション変数が最初のレンダリングでフロントエンドに表示されない

は(少し消毒)コード...だ

コントローラー:

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

∙、

あなたが画像を取得します... Essentiall y最新の値はレンダリングされません。

しかし、私はページを更新する場合、それはすべての値を正しく示しています

∙1、1、1

∙2、2、2

∙3、3、3

私は最初に値が保存されず、レンダリングが最初に起こっていると思っていましたが、hの前に新しい値のセットがあることをどうやって知っていますか?アベニューが設定されている?

答えて

0

私はそれを理解しました。 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 

私は、セッションの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 

をこのことについて奇妙なこと、そして私はそれをキャッチしていない理由は、ページを更新するとき、それは同じセッション[呼んでいたということでした。箱を]変数と表示されます。それを整理するために、バックグラウンドでセッション変数に何かが起こっているはずです。

誰でもこの洞察を共有できる場合は、

関連する問題