Sinatra 條件

2023-12-19 16:14 更新

路由也可以包含多樣的匹配條件,比如 user agent(用戶代理,比如瀏覽器就是一種用戶代理):

get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
  "你正在使用Songbird,版本是 #{params[:agent][0]}"  # :agent 代表了用戶代理相關(guān)的變量,版本的信息相當(dāng)?shù)娜?end

get '/foo' do
  # 匹配除Songbird以外的瀏覽器
end

其他可選的條件是 host_name 和 provides:

get '/', :host_name => /^admin\./ do
  "管理員區(qū)域,無權(quán)進(jìn)入!"  # host_name 表示的是主機(jī)用戶的名字
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

如果某條件需要多個值作為輸入,可以使用 通配符 參數(shù) :

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
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號