Rails:是否可以在rails控制器中使用会话变量?

时间:2016-04-03 15:36:33

标签: ruby-on-rails ruby session ruby-on-rails-4

我想知道是否可以在视图页面(.html.erb)中定义会话变量的值并在控制器中使用它?

例如:

在订单控制器中,new.html.erb:

session[:amount] = @order.amount
付款控制器文件中的

@amount = session[:amount]

我的控制器中有一个变量,它的值应根据我在其中一个视图中得到的变量进行更改。由于值存储在会话中,我需要在控制器中使用会话值。提前感谢您的描述和回复。

3 个答案:

答案 0 :(得分:1)

在尝试时,我发现可以使用会话变量将参数从视图传递到控制器。我遇到的问题是由于变量值的类型。我使用了一个会话变量并使用" flood"更改了它的类型。功能,问题解决了。

我以一般形式提出问题,以了解有关会话变量的更多信息,但遗憾的是我没有收到正确答案。

答案 1 :(得分:0)

你说

  

其值应根据我得到的变量之一进行更改   意见

视图如何获得价值?

  • 如果您是通过用户输入获得的:

在视图中使用ruby不会有帮助,因为用户正在与HTML页面进行交互。您应该使用表单POST,可能是异步的,以进行服务器调用,这将把新值设置为rails会话。

  • 如果你通过计算ruby中的内容得到它:

然后你可以而且应该从控制器而不是从视图中做到这一点。是的,您可以在rails会话中存储值。

此外,如果您不确定问题出在哪里(会话使用或Stripe API使用),我建议您将两个问题分开来找出解决方案。 例如,尝试在一个控制器方法中设置会话中的任何硬编码值,然后在另一个控制器方法中读取它。如果有效,请将其与Stripe结合使用。

答案 2 :(得分:-1)

您面临的问题是跨多个请求拥有持久性数据。

您无法在rails视图中设置会话。因为会话的整个原则是在服务器端拥有持久数据。要解决您的问题,您可以使用cookie。 Cookie用于在客户端的请求中存储持久数据,并随每个服务器请求发送到服务器。在视图中设置cookie并在控制器中使用它将满足您的目的。