Routing路由
config/routes.rb
match 'patients/:id' => 'patients#show'
<%= link_to 'Show', patient_path(@patient) %>
resources :patiends
GET POST PUT DELETE HEAD
get index
get new
post create
get show
get edit
put update
delete destroy
photos_path
new_photo_path
edit_photo_path(:id)
photo_path(:id)
namespace :admin do
resources :posts, :comments
end
/admin/posts
/admin/posts/new
/admin/posts
/admin/post/:id
/admin/post/:id/edit
/admin/post/:id
/admin/post/:id
scope :module => 'admin' od
resources :posts, :comments
end
resources :posts, :comments, :module => 'admin'
scope '/admin' do
resources :posts, :comments,
end
resources :posts, path => '/admin/posts'
resources :posts do
resources :comments
end
post_comments_url
edit_post_comment_url
post_comment_url(@comment)
csrf
cross-site request forgery
resources should never be nested more than 1 level deep.
url_for
<%= link_to 'ad detail', maganize_ad_path(@maganize,@ad) %>
<%= link_to 'ad detail', url_for(@magazine, @ad) %>
<%= link_to 'ad detail', [@magazine,@ad] %>
<%= link_to 'magazine detail', @magazine %>
show
new
create
edit
update
index
destroy
resources :photos do
member do
get 'preview'
end
end
preview_photo_url
preview_photo_path
resources :photo do
get 'preview', :on => :member
end
/photo/11/preview
photoscontroller.preview
resource :photos dd
collection do
get 'search'
end
end
resoruce :photos do
get 'search', :on => :collection
end
/photos/search
photoscontroller.search
invoke show action of photoscontroller
match ':controller(/:action(/:id))'
match ':controller/:action/:id/:userid'
match ':controller(/:action(/:id))', :controller => admin\/[^\/]+/
match ':controller/:action/:id/with_user/:userid'
match 'photos/:id' => 'photos#show'
match 'photos/:id' => 'photos#show', :default => { :format => 'jpg' }
match 'exit' => 'sessions#destroy', :as => :logout
logout_url
logout_path => /exit
match 'photos/show' => 'photos#show', :via => :get
get 'photos/show'
match 'photos/show' => 'photos#show', :via => [:get, :post]
match 'photos/:id' => 'photos#show', :constraint => { :id => /[A-Z]\d{5}/ }
/photos/A12345
match 'photos/:id' => 'photos#show', :id => /[A-Z]\d{5}/
match '/:id' => 'posts#show', :constraints => { :id => /\d.+/ }
match '/:username' => 'users#show'
match 'photos', :constraints => { :subdomain => 'admin' }
namespace :admin do
constraints :subdomain => 'admin' do
resources :photos
end
end
class BlacklistConstraint
def initialize
@ips = Blacklist.retrieve_ips
end
def matches?(request)
@ips.include?(request.reqmote_ip)
end
end
TwitterClone::Application.routes.draw do
match '*path' => 'blacklist#index',
:constraints => BlacklistConstraint.new
end
match 'photos/*other' => 'photos#unknown'
photos/12 => params[:other]=12
photos/long/path/to/12 => params[:other]=long/path/to/12
match 'books/*section/:title' => 'books#show'
books/some/section/last-world => params[:section]=some/section, params[:title]=last-world
match '*a/foo/*b' => 'test#index'
zoo/woo/foo/bar/baz => params[:a]=zoo/woo, params[:b]=bar/baz
match '/stories' => redirect('/posts')
match '/stories/:name' => redirect('/posts/%{name}')
match '/stories/:name' => redirect { |params| '/posts/#{params[:name].pluralize}' }
match '/stories' => redirect { |p,req| '/posts/#{req.subdomain}' }
301 move permanently redirect
root :to => 'page#main'
resources :photos, :controller => 'p_w_picpaths'
/photos => p_w_picpathscontroller
/photos
/photos/new
/photos
/photos/:id
/photos/:id/edit
photos_url
new_photo_path
resources :photos, :constraints => { :id => /[A-Z][A-Z][0-9]+/ }
no longer math /photos/1, instead, /photos/AA8 would match.
constraints(:id => /[A-Z][A-Z][0-9]+/) do
resources :photos
resources :accounts
end
resources :photos, :as => 'p_w_picpaths'
/photos => photoscontroller
/photos p_w_picpaths_path
/photos/new new_p_w_picpath_path
/photos/:id/edit edit_p_w_picpath_path
resources :photos, :path_names => { :name => 'make', :edit => 'change' }
/photos/make
/photos/1/change
scope :path_names => { :name => 'make' } do
# rest of your routs
end
scope 'admin' do
resources :photos, :as => 'admin_photos'
end
resources :photos
admin_photos_path, new_admin_photo_path
scope 'admin', :as => 'admin' do
resources :photos, :accounts
end
resources :photos, :accounts
/admin/photos => admin_photos_path,
/admin/accounts => admin_accounts_path
scope ':username' do
resources :posts
end
/bob/posts/1 => params[:username]=bob
resources :photos, :only => [:index, :show]
resources :photos, :except => :destroy
scope(:path_names => { :new => 'neu', :edit => 'bearbeiten' }) do
resources :categories, :path => 'kategorien'
end
/kategorien categories_path
/kategorien/neu new_category_path
/kategorien/:id/bearbeiten edit_category_path(:id)
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'tooth', 'teeth'
end
resources :magazine do
resources :ads, :as => 'periodical_ads'
end
magazine_periodical_ads_url
edit_magazine_periodical_ad_path
rake routes #列出所有的route信息
testing routes
assert_generates '/photos/1', { :controller => 'photos', :action => 'show', :id => '1' }
assert_generates '/about', :controller => 'pages', :action => 'about'
assert_recognizes({ :controller => 'photos', :action => 'show', :id => '1' }, '/photos/1')
assert_recognizes({ :controller => 'photos', :action => 'create' }, { :path => 'photos', :method => :post })
assert_routing({ :path => 'photos', :method => :post}, { :controller => 'photos', :action => 'create' })
参考文献