前 基礎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