【问题标题】:Rails: Is it possible to use a session variable in a rails controller?Rails:是否可以在 Rails 控制器中使用会话变量?
【发布时间】:2016-04-04 16:34:54
【问题描述】:

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

例如:

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

session[:amount] = @order.amount

在支付控制器文件中:

@amount = session[:amount]

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

【问题讨论】:

  • 如果可能的话,你为什么不试试呢?
  • 建议您不要在视图中而是在控制器中设置session[:amount]
  • @spickermann 我试过了,我得到了一个错误,但我不确定这个错误是因为这个问题还是与其他问题有关!
  • @ThomasR.Koll 谢谢!以及如何在两个不同控制器的视图之间传递参数??
  • 你遇到了什么错误?

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


【解决方案1】:

在我尝试的过程中,我发现可以使用会话变量将参数从视图传递到控制器。我遇到的问题是由于变量值的类型。我使用了一个会话变量,并通过“洪水”函数改变了它的类型,问题就解决了。

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

【讨论】:

    【解决方案2】:

    你说

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

    视图如何获得价值?

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

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

    • 如果你用 ruby​​ 计算得到它:

    那么您可以并且应该从控制器而不是视图中执行此操作。是的,您可以在 rails 会话中存储值。

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

    【讨论】:

    • 感谢您的回复。问题已解决,正如您所说,可以在 rails 会话中存储值。
    【解决方案3】:

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

    您不能在 rails 视图中设置会话。由于会话的整个原理是在服务器端拥有持久数据。为了解决您的问题,您可以使用 cookie。 Cookie 用于在客户端的请求中存储持久数据,并随每个服务器请求一起发送到服务器。在您的视图中设置一个 cookie 并在控制器中使用它会达到您的目的。

    【讨论】:

    • Rails 视图是服务器上 Rails 控制器使用的模板,session 可供它们使用。
    猜你喜欢
    • 2010-10-23
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多