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后它才开始工作。现在它失败了