gpt4 book ai didi

ruby - 在 sinatra 的路由定义中使用参数

转载 作者:数据小太阳 更新时间:2023-10-29 08:33:54 25 4
gpt4 key购买 nike

我已经尝试了几个小时,但仍然无法按照我想要的方式配置我的路线。

我想实现的是:

http://fooo.bar/prefix1234

我想捕获以特定前缀开头的所有内容。

很简单:

get "/prefix:id" do
puts params[:id]
end

但我不希望它是一个固定的前缀。我想把前缀放在配置文件中

设置.rb:设置:前缀,'pre'

get "/#{settings.prefix}:id" do
puts params[:id]
end

这将不起作用(Sinatra::Application:Class (NoMethodError) 的未定义方法“前缀”)。我还尝试使用正则表达式进行捕获:

before do
@prefix = settings.prefix
end

get %r{#{@prefix}(\d+)} do |id|
puts "Params: #{id}"
end

这也不起作用(不会捕获 URL)

有人有什么东西吗?

最佳答案

我几乎无需修改就能使您的示例正常工作。这使我能够按照您的描述进行操作:

before do
@prefix = "test"
end

get %r{#{@prefix}(\d+)} do |c|
puts "#{@prefix} #{c}"
erb :test, :locals => {:id => c}
end

然后我运行 shotgun 来测试输出并调用/test123。输出是:

测试 123

我的观点还重申,这是正常运作的。如果问题是 URL 没有被捕获,您可能需要重新组织您的结构,使其更像是:

before do
@prefix = "test"
end

get "/#{@prefix}/:id" do
puts "#{@prefix} #{params[:id]}"
erb :test, :locals => {:id => params[:id]}
end

我不知道后者是否适合您的应用程序,但如果您在路由中不够具体,您就会让自己面临频繁的错误匹配。根据我的经验,您的应用程序越 RESTful,您在编写这些类型的操作时就会越好。

或者,也许一个 YAML 文件来存储你的设置,然后由脚本解析会给你更好的路由结果。例如,包含以下内容的 YAML 文件:

prefix: test

然后是解析它的帮助脚本,看起来像这样:

helpers do
def config
@config = YAML.load_file("config.yml")
end
end

然后你可以用这个替换你的 before block :

before do
@prefix = config["prefix"]
end

我的编码品味使我倾向于使用 YAML 方法,但我认为这些解决方案中的任何一个都应该可行。

关于ruby - 在 sinatra 的路由定义中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com