Edited at

基礎Ruby on Rails Chapter5 RESTとルーティング

基礎Ruby on Rails Chapter4 データの保存

基礎Ruby on Rails Chapter5 7つのアクション


RESTとルーティング


リソースレベルのルーティング


RESTとリソース


  • リソースを追加するには、resouceのあとに、リソース名の複数形を指定する。

  • これだけで7つのアクションのルーティングが設定できる。


config/routes.rb

resouces :members



リソースを扱うコントローラ、パスとHTTPメソッド

アクション
内容
パス
HTTPメソッド

index
一覧
/members
GET

new
作成のためのフォームを表示する
/members/new
GET

create
作成をする
/members/
POST

show
内容を表示
/members/123
GET

edit
更新のためのフォームを表示する
/members/123/edit
GET

update
更新する
/members/123
PATCH

destroy
削除する
/members/123
DELETE


アクションの追加



  • :collectionは、一覧の時に使う。


  • on:を使う書き方。


config/routes.rb

  resouces :members do

# 一覧にsearchアクションを追加する
get "search", on: :collection
# メンバーの停止・再開を追加する
patch "suspend", "restore", on: :member
end


  • ブロックで囲む書き方


config/routes.rb

  resouces :members do

# 一覧にsearchアクションを追加する
collection { get "search" }
# メンバーの停止・再開を追加する
member { patch "suspend", "restore" }
end


  • 追加されたアクション

アクション
内容
パス
HTTPメソッド

search
検索
/members/search
GET

suspend
停止
/members/123/suspend
PATCH

restore
再開
/members/123/restore
PATCH


  • 7つのアクションで、限定や除外をするには、only:except:を使う


config/routes.rb

  # indexとshowのルーティングだけ設定する

resouces :members, only: [:index, :show]
# destroy以外の6つのアクションのルーティングを設定する
resouces :members, except: [:destroy]


リソースとパスの指定


パスを返すメソッド


  • リソースの集合を扱うindexとcreateでは、members_pathのように、複数形になる。

アクション
内容
戻り値の例
HTTPメソッドパスを返すメソッド

index
一覧
/members
members_path

new
作成のためのフォームを表示する
/members/new
new_member_path

create
作成をする
/members/
members_path

show
内容を表示
/members/123
member_path(member)

edit
更新のためのフォームを表示する
/members/123/edit
edit_member_path(member)

update
更新する
/members/123
member_path(member)

destroy
削除する
/members/123
member_path(member)


  • 一覧ページ(index)のリンクは次のようになる。

link_to "会員一覧", members_path


  • showやeditのように個別リソースを扱うアクションへのリンクはモデルオブジェクトを渡す。

link_to @member.name, member_path(@member)


  • member_path(member)は複数のアクションで使われるが、アクションの区別はHTTPメソッドで行う。

  • 削除→delete、更新→patch、表示→get

  • 一覧→get、作成→post

link_to "削除", member_path(@member), method: :delete


  • アクションを追加したときは、次のメソッドがパスを返すようになる。

アクション
内容
パス
HTTPメソッド
パスを返すメソッド

search
検索
/members/search
GET
search_members_path

suspend
停止
/members/123/suspend
PATCH
suspend_member_path

restore
再開
/members/123/restore
PATCH
restore_member_path


  • members_pathをmembers_urlにすると、http://から始まるURLを返す。


オブジェクトでパスを返す


  • link_toメソッドの第2引数にモデルオブジェクトを渡すと、member_pathメソッドと同じパスに変換される。

# /members/123 (GET) 

link_to member.name, @member
# /members/123 (DELETE)
link_to "削除", @member, method: :delete


  • 個別のリソースを使うアクションは、配列を使って[:アクション名, オブジェクト]で表す。

# /members/123/edit (GET)

link_to "編集", [:edit, @member]
# /members/123/suspend (PATCH)
link_to "停止", [:suspend @member], method: :patch


  • indexやnewのように、idをとらないアクションは、_pathを取った文字列をシンボルにしたものが使える。

# /members/ (GET)

link_to "会員一覧", :members
# /members/new (GET)
link_to "新規追加", :new_member

参考

改訂4版 基礎 Ruby on Rails (IMPRESS KISO SERIES)