3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-22

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

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

  • 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)

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?