Rails

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