個人的メモです、以下サイトの内容をメモしただけなので是非そちらを
参考URL一覧
こちらの記事を中心に勉強しましたので是非こちらをごらんください。
# ルーティングの設定方法
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 と指定すれば利用出来る
###作り方
#必ずresourcesで定義する必要がある、むしろresourcesで定義すればresetになる
resources :products
###対極の概念RPC
URLの後ろに色々つけてどうにかしようとするやつ
/admin?action=prefecture_list&id=1
RESTはあくまでレールの一部なので必ずしもRESTで作るべきというわけではない
###RESTではなく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関連の基本的に使われるメソッドが生成される
resource :prefecture
単数系だと:idが含まれない => つまりclient.idが1番のユーザーの編集などの複雑なルーティングができなくなる。
単純なページアクセスの場合に利用する
単数系で指定して、consoleからpathを確認したら
app.admin_client_path では正常
app.admin_client_path(1) とidを指定すると見慣れないurlが生まれる
#ルーティングのネストを行い複雑なルーティング設定を行う
#resources :clientsだけで生成されるルーティングは /clients/:id である (複数形だから)
resources :clients do
#ネストすると /clients/:id/password になり、クライアントのパスワード設定ページへのルーティングを行える
resource :password
end
ネストすることによってclients/:id/passwordを生成できる、用途としては
クライアントidが1番のアカウントのパスワードを設定するページを新規に作る時などに利用出来る。
#namespaceによる urlの仕切りを作成する
例:管理者、クライアント、一般ユーザー の3者それぞれのマイページのurlを分けることもできる
admin/mypage
client/mypage
user/mypage
#管理者
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を利用することで実現できます。
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に紐づくルーティングが生成されました!
あとはコントローラー側でメソッドを定義し、viewを作成、またはすでにあるviewにredirect_toすれば新機能を追加できます