首页 > 解决方案 > 如何生成然后重定向到 Sinatra 中生成的链接?

问题描述

我有一些麻烦。这是我的代码:

get '/generate' do
  @link = Link.create(url: Helpers.random, message: "my new ffffff")
  session[:test] = @link.url
  redirect ("/message/#{session[:test]}")
end

get "/message/#{session[:test]}" do
  erb :buttons
end

在第一种方法中,我生成了一些链接,在第二种方法中,我想重定向到该生成的链接。我怎么能轻而易举呢?因为我收到

Sinatra 不知道这个小曲。

即使我将session[:test] = @link.url从 get 方法移到分离的方法中,我也会收到:

NameError: main:Object 的未定义局部变量或方法“会话”

标签: rubysinatra

解决方案


这里有 2 个“范围”,你正在以一种不可能的方式混合它们。

get "/message/#{session[:test]}" do

^^ 这是在应用程序启动时运行的,它永远不会重新运行。块内的内容可以运行多次,但不能运行路由匹配器。

处理此问题的方法是更改​​路由匹配器以接受 URL 参数:

get "/message/:some_var"

然后在块中参考params[:some_var]


推荐阅读