在 Rails 中的控制器函数之间传递变量

问题描述 投票:0回答:1

我正在学习 Rails(和 ruby),我想知道是否可以在控制器函数之间传递变量。

基本上,我的问题可以这样恢复:

#controller.rb

def pageA
    #assuming @variable is from a form
    @variable = "foo"

    if @variable == "foo"
        redirect_to action: 'pageB'
    else
        ...
    end

end

def pageB
    #I'd like to reuse @variable in pageB.html.erb
end

可以使用 redirect_to 吗?我应该采取另一种方法吗?

出于好奇,这是一个可以使用缓存解决的问题吗?

ruby-on-rails model-view-controller
1个回答
0
投票

这是不可能像你尝试做的那样。 Ruby on Rails - 与许多其他基于服务器的 Web 框架一样 - 基本上为每个请求新鲜开始处理状态。

这意味着:用户请求某些内容(例如调用 pageA),并且当请求另一个页面(例如 pageB)时不会保留任何状态。当您重定向用户时,Rails 会将重定向命令发送回浏览器,然后向 Rails 服务器启动一个新请求。

如果您想保留 state 或其他数据,则必须在 URL 中对其进行编码(或使用会话,例如当您有登录系统时)。

在您的情况下,您可以简单地将来自表单(即

params
数组)的 @variable 添加到重定向:

redirect_to action: 'pageB', variable: @variable

然后,在

pageB
方法中,变量的旧值将再次作为
params[:variable]
可用。 该值将出现在 URL 中。

请注意,您不应使用该方法对密码等敏感数据进行编码。

您可以在Rails 文档

中查看更多使用redirect_to方法的示例
© www.soinside.com 2019 - 2024. All rights reserved.