はじめに
フリマアプリのチーム開発をしている時のメンバーからの質問で、『商品購入完了のページを作成しているが、編集(edit)や削除(destroy)は分かるが購入完了はどういうアクションを使ったら良いかわからない』というのがあったので調べたことを備忘録として残しておきます。
結論
まずその時にとった選択として、任意のアクションを作るということにしました。
今回の場合には完了(done)とさせていただきました。
(正しくは購入完了ですのでPurchase completedなんですが・・・)
ということで無事解決!!
という訳には行きません。
今回の論点は基本の7つのアクション以外のアクションを追加した時の対応です。
7つのアクションとは
7つのアクションとは、railsで定義されているメソッドのことで以下のものを言います。
アクション | 役割 |
---|---|
index | 一覧を表示する |
show | 詳細を表示する |
new | 投稿フォームを表示する |
create | リソースを追加する |
edit | 更新フォームを表示する |
update | リソースを更新する |
destroy | リソースを削除する |
これらをroutes.rbに設定するときはresourcesのメソッドを使用するかと思います。
Rails.application.routes.draw do
resources :items
end
7つのアクションはそれぞれに与えられた役割があるので機能を追加したときはまずはこの7つのアクションのうちどれにあてはまるかを考えます。
7つのアクション以外のアクションの場合
上記のresoucesメソッドで7つのアクションを自動で定義できますが、今回のように7つのアクション以外のアクション(done)を追加する場合はどうしたら良いでしょうか?
・collectionとmember
7つの基本アクション以外でルーティングを定義する時には、collectionかmemberを利用します。
collectionはルーティングに:idがつかない、memberは:idがつく。という違いがあります。
今回の購入完了(done)は特にidを指定する必要のない単なる通知のページの作成となりますのでcollectionを使用します。
今回の実装では商品購入に関わるordersコントローラーにアクションを追加しました。
class OrdersController < ApplicationController
def show
省略
end
def create
省略
redirect_to action: :done ⬅️ 購入が完了したらdoneに移動してもらう
end
def done ⬅️ 今回追加されたアクション
end
end
続けてルーティング
resources :orders, only: [:show, :create] do
collection do ⬅️ 今回はcollectionを使用(idは不要)
get 'done'
end
end
あとはdoneのhtmlとcssを作成して購入完了ページを作成する!!
これで完成!!
参考にした記事:https://pikawaka.com/rails/resources#member%E3%81%A8collection
最後に
スクールでのチーム開発の期間もあと僅かとなりました。
これまで一緒に学んできた仲間たちへの感謝の気持ちを込めて、些細なことでも記録に留めておきたいと思います。
ここまでご覧いただきましてありがとうございました。