路由与参数
处理 HTTP
路由与参数 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
处理 HTTP 请求
网络应用通过匹配路由和读取参数来响应请求。
- 路径片段可以是动态的
- 查询字符串携带额外数据
- 表单正文携带已提交的字段
Sinatra 会通过 params 哈希提供所有这些内容。
require 'sinatra'
get '/echo' do
params['msg'].to_s
end命名路由参数
路径中的冒号定义了一个命名参数,用于捕获路径片段。
/users/:id会匹配/users/42- 捕获的值会出现在
params['id']中
require 'sinatra'
get '/users/:id' do
"User ID is #{params['id']}"
end多个参数
一个路由可以包含多个命名参数。
- 每个冒号片段都会成为
params中的一个键 - 访问参数时不受路径中排列顺序的影响
require 'sinatra'
get '/posts/:year/:month' do
"Posts from #{params['month']}/#{params['year']}"
end查询字符串参数
? 后面的查询字符串值也会进入 params。
/search?q=ruby会得到params['q'] == 'ruby'- 多个键值对之间使用
&分隔
require 'sinatra'
get '/search' do
"Searching for: #{params['q']}"
end将 params 作为哈希处理
params 对象的行为类似 Ruby 哈希。使用普通哈希进行练习,可以让这些模式更加清晰。
- 为确保安全,请使用带默认值的
fetch - 按照惯例,键是字符串
params = { 'name' => 'Ada', 'lang' => 'Ruby' }
puts params['name']
puts params.fetch('age', 'unknown')使用 POST 处理表单数据
对于 post 请求,提交的表单字段也会出现在 params 中。
- Sinatra 会自动解析请求正文
- 访问方式与查询参数相同
require 'sinatra'
post '/signup' do
"Welcome, #{params['username']}"
end通配参数
通配参数(*)可以匹配任意数量的字符,并将它们存储在 params['splat'] 数组中。
/files/*会捕获路径的剩余部分- 多个通配参数会产生多个数组项
require 'sinatra'
get '/files/*' do
"Path: #{params['splat'].first}"
end可选参数和正则路由
路由可以使用正则表达式进行精确匹配。
- 捕获结果可在
params['captures']中获取 - 适合设置仅允许数字 ID 等约束
require 'sinatra'
get %r{/item/(\d+)} do
"Item #{params['captures'].first}"
end验证参数
传入的参数以字符串形式到达,因此请始终对其进行验证和转换。
- 对于数字,请使用
to_i或Integer() - 缺少必填值时,请返回清晰的错误
def parse_id(raw)
id = Integer(raw)
raise 'must be positive' if id <= 0
id
end
puts parse_id('42')默认值
请为可选参数提供合理的默认值,以避免出现 nil 错误。
params.fetch('page', '1')- 结合转换操作,实现安全的分页
params = { 'page' => nil }
page = (params['page'] || '1').to_i
puts "Page: #{page}"重定向
使用 redirect 将客户端发送到另一个 URL。
- 默认发出 302 状态
- 常用于表单成功提交之后
require 'sinatra'
post '/login' do
redirect '/dashboard'
end快速检查
请检查您对路由和参数的了解。
回顾
您已经学会了 Sinatra 如何处理输入:
- 命名参数在路径中使用
:name - 查询字符串和表单字段也会填充
params - 通配参数和正则路由可以捕获灵活的路径
- 始终验证并转换字符串参数
- 使用
redirect在不同 URL 之间转移客户端
接下来,您将返回结构化的 JSON 响应。
常见问题解答
「路由与参数」课时是免费的吗?
是的 — 「路由与参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「路由与参数」这节课中我会学到什么?
处理 HTTP 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「路由与参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。