2017-09-14 43 views
0

我在調試問題上遇到問題。我試圖在.html.erb文件上打印存儲在會話哈希中的變量的值。我使用會話參數的調試屏幕來確認所有變量都存在,但是當瀏覽器開始呈現html代碼時,我看不到我需要的值。如何在Ruby on Rails中的會話對象中顯示值?

在控制器類我有:

@var = session[:var] 

和html.erb文件

<%= @var %> 

我使用調試屏幕此代碼:

<%# in application.html.erb %> 
<%= debug(params) if Rails.env.development? %> 

在哪裏錯了嗎?

+0

你能告訴我們關於你的「調試屏幕」的更多信息嗎?你在調試屏幕上使用什麼工具/代碼?你是否在控制器或視圖中檢查變量?你在檢查session [:var]或@var的值還是兩者? – eiko

+0

我使用這段代碼進行調試屏幕,我把這一行放在application.html.erb中: <%= debug(params)if Rails.env.development? %> 我檢查@var的價值,因爲調試屏幕這樣說: 「會話:紅寶石/哈希與 - 高德:ActionController的::參數 元素: VAR:‘5’ 高德: :@permitted:false「 所以我認爲會議[:var]中的一切都很好。 –

+1

我建議添加一個調試器到控制器方法 - 撬工程很好。 https://github.com/rweng/pry-rails你可以在'@var = session [:var]'之後添加'biding.pry'。否則,在您的控制器操作+視圖中提供更多代碼。 –

回答

0

根據您的調試代碼:

<%= debug(params) if Rails.env.development? %> 

它看起來像你檢查params對象,而不是session對象。 params是保存當前請求的GET和POST數據的對象。然而,session使用cookie來保存多個請求的數據。

如果這個數據是你只需要爲這個特定頁面,你應該只使用PARAMS直接:

@var = params[:var] 

如果你真的希望保存在用戶的會話這個數據,你需要在你可以訪問它之前要這麼做:

# session[:var] will be available in future requests, 
# long after params[:var] and @var have been cleared. 
session[:var] = params[:var] 
@var = session[:var]