繁体   English   中英

ruby sinatra如何使用正则表达式重定向

[英]ruby sinatra how to redirect with regex

我正在尝试将根目录下的内容移动到/ en /目录,以使我的小服务使用多种语言。

所以,我想重定向这个网址

mysite.com/?year=2018

mysite.com/en/?year=2018

我的代码就像

get %r{^/(\\?year\\=\\d{4})$} do |c| redirect "/en/#{c}" end

但似乎我从未从网址中获得#{c}部分。

这是为什么? 还是有更好的方法来做到这一点?

谢谢!

您可以使用request.path变量来获取所需的信息。

例如,

get "/something" do
  puts request.path # => "/something"
  redirect "/en#{request.path}"
end

但是,如果您使用查询参数(即?yeah=2000 ),则必须手动将这些参数传递给重定向路由。

有点不直观,ActiveRecord中有一个辅助方法。

require 'active_record'
get "/something" do
  puts params.to_param
  # if params[:year] is 2000, you'll get "year=2000"

  redirect "/en#{request.path}?#{params.to_param}"
end

您也可以很容易地编写自己的帮助方法:

def hash_to_param_string(hash)
  hash.reduce("") do |string, (key, val)|
    string << "#{key}=#{val}&"
  end
end

puts hash_to_param_string({key1: "val1", key2: "val2"})
# => "key1=val1&key2=val2"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM