28
23

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 3 years have passed since last update.

[Ruby on rails]7つのアクション以外のアクションの設定

Last updated at Posted at 2020-04-12

はじめに

フリマアプリのチーム開発をしている時のメンバーからの質問で、『商品購入完了のページを作成しているが、編集(edit)や削除(destroy)は分かるが購入完了はどういうアクションを使ったら良いかわからない』というのがあったので調べたことを備忘録として残しておきます。

結論

まずその時にとった選択として、任意のアクションを作るということにしました。
今回の場合には完了(done)とさせていただきました。
(正しくは購入完了ですのでPurchase completedなんですが・・・)
ということで無事解決!!
という訳には行きません。
今回の論点は基本の7つのアクション以外のアクションを追加した時の対応です。

7つのアクションとは

7つのアクションとは、railsで定義されているメソッドのことで以下のものを言います。

アクション 役割       
index 一覧を表示する     
show 詳細を表示する     
new 投稿フォームを表示する 
create リソースを追加する   
edit    更新フォームを表示する 
update    リソースを更新する   
destroy   リソースを削除する   

これらをroutes.rbに設定するときはresourcesのメソッドを使用するかと思います。

routes.rb(例)
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コントローラーにアクションを追加しました。

orders_controller.rb
class OrdersController < ApplicationController

  def show
      省略
  end

  def create
      省略
   redirect_to action: :done ⬅️ 購入が完了したらdoneに移動してもらう
  end
 
  def done ⬅️ 今回追加されたアクション

  end

 
end

続けてルーティング

routes.rb
resources :orders, only: [:show, :create] do
   collection do ⬅️ 今回はcollectionを使用(idは不要)
    get 'done'
   end
end

あとはdoneのhtmlとcssを作成して購入完了ページを作成する!!

Screenshot from Gyazo

これで完成!!

参考にした記事:https://pikawaka.com/rails/resources#member%E3%81%A8collection

最後に

スクールでのチーム開発の期間もあと僅かとなりました。
これまで一緒に学んできた仲間たちへの感謝の気持ちを込めて、些細なことでも記録に留めておきたいと思います。
ここまでご覧いただきましてありがとうございました。

28
23
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
28
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?