2016-04-03 63 views
-2

我想知道是否可以在視圖頁面(.html.erb)中爲會話變量定義一個值並將其用於控制​​器中?Rails:是否可以在rails控制器中使用會話變量?

例如:

爲了控制器,new.html.erb:

session[:amount] = @order.amount 
支付控制器文件

@amount = session[:amount] 

我在我的控制器中的變量,它的值應根據我在其中一個視圖中獲得的變量進行更改。由於該值存儲在會話中,因此我需要在控制器中使用會話值。預先感謝您的描述和答覆。

+0

爲什麼你不試試,如果這是可能的? – spickermann

+0

建議您不要在您的視圖中設置'session [:amount]',而是在您的控制器中。 –

+0

@spickermann我試過了,但我得到一個錯誤,但我不確定錯誤是由於這個問題還是與其他問題有關! –

回答

0

正如我試過的,我發現可以使用會話變量將視圖中的參數傳遞給控制器​​。我遇到的問題是由於變量值的類型。我使用了一個會話變量,並通過使用「泛洪」功能改變了它的類型,問題就解決了。

我問了一般形式的問題,以瞭解有關會話變量的更多信息,但不幸的是我沒有收到正確答案。

-1

您面臨的問題是跨多個請求擁有持久性數據。

您不能在rails視圖中設置會話。因爲會話的整個原則是在服務器端擁有持久數據。要解決您的問題,您可以使用Cookie。 Cookie用於存儲客戶端請求中的持久數據,並在每個服務器請求時發送到服務器。在你的視圖中設置一個cookie並在控制器中使用它可以達到你的目的。

+0

Rails視圖是服務器上的rails控制器使用的模板,它們可以使用'session'。 – Satya

0

你說

其值應基於可變我的 一個觀點

怎樣的觀點中獲得的價值得到改變?

  • 如果通過用戶輸入獲得它:

在視圖中使用Ruby也無濟於事,因爲用戶與HTML頁面交互。你應該使用一個表單POST,可能是異步進行一個服務器調用,它將把新值設置爲rails會話。

  • 如果您在紅寶石計算的東西得到它:

,那麼你可以,而且也應該從控制器,而不是從視圖做到這一點。是的,您可以將值存儲在導軌會話中。另外,如果您不確定問題出在哪裏(會話使用情況或Stripe API使用情況),我建議您隔離這兩個問題以找出解決方案。 例如,嘗試在一個控制器方法中設置會話中的任何硬編碼值,然後在另一個控制器方法中讀取它。當它起作用時,將其與Stripe結合使用。

+0

謝謝你的回覆。問題解決了,正如您所說的,可以將值存儲在rails會話中。 –

相關問題