Sinatra 条件

2023-12-19 16:14 更新

路由也可以包含多样的匹配条件,比如 user agent(用户代理,比如浏览器就是一种用户代理):

get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
  "你正在使用Songbird,版本是 #{params[:agent][0]}"  # :agent 代表了用户代理相关的变量,版本的信息相当的全面
end

get '/foo' do
  # 匹配除Songbird以外的浏览器
end

其他可选的条件是 host_name 和 provides:

get '/', :host_name => /^admin\./ do
  "管理员区域,无权进入!"  # host_name 表示的是主机用户的名字
end

get '/', :provides => 'html' do
  haml :index
end

get '/', :provides => ['rss', 'atom', 'xml'] do
  builder :feed
end
provides 查找请求的 Accpet 头部信息

你也可以使用​set​方法自定义条件:

set(:probability) { |value| condition { rand <= value } }

get '/win_a_car', :probability => 0.1 do
  "You won!"
end

get '/win_a_car' do
  "Sorry, you lost."
end

如果某条件需要多个值作为输入,可以使用 通配符 参数 :

set(:auth) do |*roles|   # <- notice the splat here
  condition do
    unless logged_in? && roles.any? {|role| current_user.in_role? role }
      redirect "/login/", 303
    end
  end
end

get "/my/account/", :auth => [:user, :admin] do
  "Your Account Details"
end

get "/only/admin/", :auth => :admin do
  "Only admins are allowed here!"
end
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号