読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Railsのルーティング

Rails初級 リファレンス

有用な参考文献

・基本的なルーティングが記載(Rails3 / 日本語)
Rails3 routes.rb まとめ

・基本的なRailsのルーティング(英語)
Rails Guide Routing

目次

・ルーティングの確認コマンド
・xxx_path と xxx_urlの違い
・resourcesメソッドで追加されるRESTの基本7アクション
・名前付きルート(matchメソッド)
・memberメソッドとcollectionメソッド
・ルートの入れ子

ルーティングの確認コマンド

$ rake routes

xxx_path と xxx_urlの違い

慣習として、
・xxx_path はリダイレクト以外の遷移時に使う
・xxx_url はリダイレクト時に使う

resourcesメソッドで追加されるRESTの基本7アクション

追加方法

$ vim config/routes.rb
  ...  
  resouces :users

基本の7アクション





HTTPリクエストURLコントローラのアクション用途
GET/usersindexすべてのユーザーを表示するページ
GET/users/1showid=1のユーザーを表示するページ
GET/users/newnewユーザーを新規作成するページ
POST/userscreateユーザーを作成するアクション
GET/users/1/editeditid=1のユーザーを編集するページ
PATCH/users/1updateid=1のユーザーを更新するアクション
DELETE/users/1destroyid=1のユーザーを削除するアクション

ルートパス(root_path)

$ vim config/routes.rb
  ...
  root 'static_pages#home'

名前付きルート(matchメソッド)

  #  GET /help でアクセスしたときにapp/views/static_pages/help.html.erbが呼ばれる
  # また、"help_path" という名前付きルートが用意され、ControllerやViewで使える
  # 例:<%= link_to "About", about_path %>
  match '/help', to: 'static_pages#help', via: 'get'

memberメソッドとcollectionメソッド(基本の7アクションにルートを追加できる)

memberメソッド ... ユーザidを含むURLにそのルートが応答できるようにするもの

resources :users do
    member do
        get :search, :follow
    end
end

=>
Prefix          HTTPリクエスト   URL                    コントローラ#アクション
 follow_user    GET    /users/:id/follow(.:format)   users#follow
 search_user   GET    /users/:id/search(.:format)   users#search


collectionメソッド ... idを指定せずにすべてのメンバーを表示する

resouces :users do
    collection do
        get :search
    end
end

=>
Prefix          HTTPリクエスト   URL                  コントローラ#アクション
search_users   GET    /users/search(.:format)     users#search


・ルートの入れ子
ユーザ(Userテーブル)がコメント(Commentテーブル)を持つ1対多関係( has_many と belong_to関係)になる場合などに、route.rbにルートを入れ子で指定します。

$ vim route.rb
resorces :user do
	resource :comment
end

ルート結果($rake route)です。

            Prefix Verb   URI Pattern                               Controller#Action
user_comment_index GET    /user/:user_id/comment(.:format)          comment#index
                   POST   /user/:user_id/comment(.:format)          comment#create
  new_user_comment GET    /user/:user_id/comment/new(.:format)      comment#new
 edit_user_comment GET    /user/:user_id/comment/:id/edit(.:format) comment#edit
      user_comment GET    /user/:user_id/comment/:id(.:format)      comment#show
                   PATCH  /user/:user_id/comment/:id(.:format)      comment#update
                   PUT    /user/:user_id/comment/:id(.:format)      comment#update
                   DELETE /user/:user_id/comment/:id(.:format)      comment#destroy
        user_index GET    /user(.:format)                           user#index
                   POST   /user(.:format)                           user#create
          new_user GET    /user/new(.:format)                       user#new
         edit_user GET    /user/:id/edit(.:format)                  user#edit
              user GET    /user/:id(.:format)                       user#show
                   PATCH  /user/:id(.:format)                       user#update
                   PUT    /user/:id(.:format)                       user#update
                   DELETE /user/:id(.:format)                       user#destroy

ちなみに、ビュー(View)のフォーム(form_for)での記載方法です。

<%= form_for [@user, @comment] do |f| %>
    ...
<% end %>