0Pricing
Ruby Academy · 课时

路由与参数

处理 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Sinatra 基础
  2. 路由与参数
  3. JSON API
  4. 中间件与 Rack
← 返回 Ruby Academy