Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何生成并重定向到Sinatra中生成的链接?_Ruby_Sinatra - Fatal编程技术网

Ruby 如何生成并重定向到Sinatra中生成的链接?

Ruby 如何生成并重定向到Sinatra中生成的链接?,ruby,sinatra,Ruby,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 在第一种方法中,我生成一些链接

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

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
在第一种方法中,我生成一些链接,在第二种方法中,我想重定向到生成的链接。我怎么能这么容易呢?因为我收到

西纳特拉不知道这首小调

即使我将get方法中的session[:test]=@link.url转移到我收到的单独方法中:

NameError:未定义的局部变量或方法“session” 主体:客体

这里有两个“作用域”,你以一种不可能的方式混合它们

get "/message/#{session[:test]}" do
^^这是在应用程序启动时运行的,永远不会重新运行。块内的内容可以多次运行,但路由匹配器不能运行

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

get "/message/:some_var"

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

在“get/generate method”中,我更改了params[:local]=@link.url,然后在重定向后的“get”/message/:local”中,我没有收到生成的链接,只需@JessieScinor no,保持
get'/generate'
方法与原始问题中的方法相同。只需将
get”/message/{session[:test]}
更改为
get”/message/:“
:some_var
是一种特殊类型的var,只在路由定义中起作用。请仔细阅读这里的路线部分:但这并不能解决我的问题。。重定向后,我需要像“/message/kh4sfhrs3”@JessieScinor yes这样的链接<代码>重定向“/message/#{session[:test]}”将使url
'/message/kh4sfhrs3'
符合您的需要。然后,路由处理程序使用
get”/message/:some_id“
提取id。您可以从
:some_id
变量中读取值,该变量具有
参数[:some_id]
(该变量可以根据您的需要调用),非常奇怪,直到我清除Cookie后它才开始工作。现在它失败了