LoginSignup
97
89

More than 5 years have passed since last update.

ルーティングに対してあまりにも無知だったため、ルーティングの勉強をすることにした

Last updated at Posted at 2016-09-07

個人的メモです、以下サイトの内容をメモしただけなので是非そちらを

参考URL一覧
こちらの記事を中心に勉強しましたので是非こちらをごらんください。
* http://techracho.bpsinc.jp/hachi8833/2014_03_03/15619
* http://www.rubylife.jp/rails/routing/

 ルーティングの設定方法

config/routes.rb
このファイルをいじる

確かめる方法

  • コンソールからrake routes
  • rails consoleを起動しておいて show-routesを実行すると早い
  • rails consoleで app.clients_path のように app. の後ろにパスを記述してもチェック可能
  • サーバを立ち上げておいて /rails/info/routes にアクセスしても見れる
  • サーバを立ち上げておいて /あqwせdrftgyふじk にアクセスしてエラーを出しても見れる

4つ目のやつが色々な機能があって確認するのには便利

railsのルーティング規約のRESTとは

直訳:表現状態再転送 (強そう
Re:presentational State Transfer
要するにRailsのルールのひとつ

  • ステートレス    :同じ入力に対する出力は常に同じになる = 冪等性(べきとうせい)がある 
  • 全てをリソースで表現:resources :products と定義する
  • リソースは名前を持つ:products_path   と指定すれば利用出来る

作り方

routes.rb
#必ずresourcesで定義する必要がある、むしろresourcesで定義すればresetになる
resources :products

対極の概念RPC

URLの後ろに色々つけてどうにかしようとするやつ
/admin?action=prefecture_list&id=1
RESTはあくまでレールの一部なので必ずしもRESTで作るべきというわけではない

RESTではなくHTTPメソッドを用いたルーティングの書き方

このようにも書けるらしい

HTTPメソッドを用いて定義するルーティング
get 'hello1', to: 'pages#hello'
get 'hello2', :controller => 'pages', :action => 'hello2'
get 'hello3/:id', to: 'pages#hello3'
post 'hello4', to: 'pages#hello4'

理解しておくべき単語

  • リソース:操作対象のURL
  • 名前付きルート:パスヘルパー、URLヘルパーとも呼ばれ、hoge_path,hoge_urlなどでアクセスできるようにするやつ
  • ネストしたリソース:あるリソースを他のリソースの子にすること

_path と_urlの違い

  • _pathは /clients/info などのドメイン名から下のパスを指定したことになる
  • _urlは http://localhost:3000/index などから始まるフルパス

resourcesとresource 複数形と単数系 普段は複数形を利用する

複数形
resources :clients

と記述するとclient関連の基本的に使われるメソッドが生成される
image

単数系
resource :prefecture

単数系だと:idが含まれない => つまりclient.idが1番のユーザーの編集などの複雑なルーティングができなくなる。
単純なページアクセスの場合に利用する
image

単数系で指定して、consoleからpathを確認したら
image
app.admin_client_path では正常
app.admin_client_path(1) とidを指定すると見慣れないurlが生まれる

ルーティングのネストを行い複雑なルーティング設定を行う

routes.rb
#resources :clientsだけで生成されるルーティングは /clients/:id である (複数形だから)
resources :clients do
  #ネストすると /clients/:id/password になり、クライアントのパスワード設定ページへのルーティングを行える
  resource :password
end

ネストすることによってclients/:id/passwordを生成できる、用途としては
クライアントidが1番のアカウントのパスワードを設定するページを新規に作る時などに利用出来る。
image

namespaceによる urlの仕切りを作成する

例:管理者、クライアント、一般ユーザー の3者それぞれのマイページのurlを分けることもできる
admin/mypage
client/mypage
user/mypage

routes.rb
#管理者
namespace :admin do
  resources :mypage
end
#クライアント
namespace :client do
  resources :mypage
end
#一般ユーザー
namespace :user do
  resources :mypage
end

今まで張っていた画像全てに/adminがついているのはnamespaceが設定されているからである。

自動生成される7つのアクション以外へのルーティングを設定する

collectionとmemberというのを定義するとサクッと設定できます

resoucesで自動的に作成される7つのコントローラーへのルーティングですが、
それ以外のメソッドをコントローラーに追加したい時にはcollectionかmemberを利用することで実現できます。

routes.rb
resources :clients do
  #コントローラーの新しいメソッド(idが不要な場合はcollection)
  collection do
    #全データ削除や検索には個別のIDは不要なのでcollection
    post:reset_all
    post:search
  end

  #コントローラーの新しいメソッド(idが必要な場合はmember)
  member do
    # そのクライアントのデータを初期化する作業や、初期データなどを入れる場合はidを利用するのでmember
    get :reset_data
    get :set_base_data
  end
end

以下のようにclientsコントローラーのreset_all_dataに紐づくルーティングが生成されました!
image

あとはコントローラー側でメソッドを定義し、viewを作成、またはすでにあるviewにredirect_toすれば新機能を追加できます

97
89
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
97
89