Ruby
HTML
JavaScript
Rails
RubyOnRails

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

More than 1 year has passed since last update.


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

参考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すれば新機能を追加できます