第二部分:non resource routing

这一部分主要采用非resource的方式来制定routes.rb.

bound parameters

#guides中的代码如下所示
get 'photos(/:id)', to: :display

#经过测试,guides中的代码为错误缺少controller,应该指明controller,比如如下所示
get 'photos(/:id)', to: "photos#display"

#注意,guides中的代码为错误
#(/:id)为可选参数,因此/photos, /photos/12, /photos/xx,  都会指向"photos#display"

dynamic segments

#guides中代码
get 'photos/:id/:user_id', to: 'photos#show'

#任何类似url 'photos/xx/yy',都可以得到如下内容
parmas[:id] #=>xx
params[:user_id] #=>yy

static segments

#guides中代码
get 'photos/:id/with_user/:user_id', to: 'photos#show'
#任何类似url 'photos/xx/with_user/yy',都可以得到如下内容
params[:controller] #=>photo
params[:action] #=>show
params[:id] #=>xx
params[:user_id] #=>yy

query string

#guides中代码
get 'photos/:id', to: 'photos#show'
#/photos/1?user_id=2
{controller: 'photos', action: 'show', id: '1', user_id: '2'}

defining defaults

#guides中代码
get 'photos/:id', to: 'photos#show', defaults: { format: 'jpg' }
#photos/12
{controller: 'photos', action: 'show', id: '12', format: 'jpg'}

#另外写法
defaults format: :jpg do
  resources :photos
end

naming routes

#guides中代码
get 'exit', to: 'sessions#destroy', as: :logout
#获得如下helper
logout_path, logout_url, 连个helper同时指向url为/exit

http verb constraints

#使用match必须指定verb,如果不指定verb会报错
#约定的verb包括get,post, put, patch, delete
match 'photos', to: 'photos#show', via: [:get, :post]
match 'photos', to: 'photos#show', via: :all

dynamic constraints

#对dynamic params进行限制,经过测试不起作用
get 'photos/:id', to: 'photos#show', constraints: { id: /[A-Z]\d{5}/ }
get 'photos/:id', to: 'photos#show', id: /[A-Z]\d{5}/  #可以省略constraints
get '/:id', to: 'articles#show', constraints: { id: /^\d/ } #这个不行,设置锚定不允许

subdomain constraints

#设置subdomain
constraints subdomain: 'admin' do
  resources :articles
end
#必须设定subdomain为admin才可

正则匹配

#guides代码
get 'photos/*other', to: 'photos#unknown'
#photos/12 or /photos/long/path/to/12, setting params[:other] to "12" or "long/path/to/12".

redirection

#重定向
get '/stories', to: redirect('/articles')
get '/stories/:name', to: redirect('/articles/%{name}') #获取前值
#通过block形式获取重定向,参数分别为前值参数和request
get '/stories/:name', to: redirect { |path_params, req| "/articles/#{path_params[:name].pluralize}" }
get '/stories', to: redirect { |path_params, req| "/articles/#{req.subdomain}" }

root

#root定向
root "articles#index"
root to: "articles#index"

results matching ""

    No results matching ""