2016-04-03 88 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会话中。 –

相关问题