【问题标题】:How to generate and then redirect to that generated link in Sinatra?如何生成然后重定向到 Sinatra 中生成的链接?
【发布时间】:2019-09-26 14:25:03
【问题描述】:

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

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:未定义的局部变量或方法“会话” 主要:对象

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    这里有 2 个“作用域”,您正在以一种不可能的方式混合它们。

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

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

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

    get "/message/:some_var"
    

    然后在块中引用params[:some_var]

    【讨论】:

    • 在 'get /generate method' 我更改了 params[:local] = @link.url,然后在 'get "/message/:local' 重定向后我没有收到生成的链接,只是127.0.0.1:9393/message/:local
    • @JessieScinor 不,保持get '/generate' 方法与原始问题中的方法相同。只需将get "/message/#{session[:test]}" 更改为get "/message/:some_var":some_var 是一种特殊类型的 var, 在路由定义中起作用。请在此处阅读“路线”部分:sinatrarb.com/intro.html
    • 但它不能解决我的问题..重定向后我需要链接类似'/message/kh4sfhrs3'
    • @JessieScinor 是的。 redirect "/message/#{session[:test]}" 将根据需要创建 URL '/message/kh4sfhrs3'。然后路由处理程序提取 id 为get "/message/:some_id"。您可以使用params[:some_id] 从该:some_id 变量中读取值(该变量可以任意调用)
    • 很奇怪,在我清除 cookie 之前它以某种方式工作......现在它失败了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多