Railsのきれいなコードのお題案 · Issue #1 · clean-rails-ja/conversationからの転載
普通の Rails で作られる RESTful には無い bulk update な要件。
例
ToDo リストで複数のタスクに対して「まとめて完了にする」「まとめてタグを付ける」などをする機能。
remember the milkの画面がイメージに近いです。
似たような機能でありがちなものだと、「通知をまとめて既読にする」とかもあります。
Railsのきれいなコードのお題案 · Issue #1 · clean-rails-ja/conversationからの転載
普通の Rails で作られる RESTful には無い bulk update な要件。
ToDo リストで複数のタスクに対して「まとめて完了にする」「まとめてタグを付ける」などをする機能。
remember the milkの画面がイメージに近いです。
似たような機能でありがちなものだと、「通知をまとめて既読にする」とかもあります。
クラスの違うものが並んでいたりするともっと迷いますね
まずどこのコントローラに要求投げればいいのかとか。
この例で言うと、POROでToDoListというモデルが作れるんじゃないだろうか。
複数のものを持つ上位概念を集約ルートとして定義できるか、まず考える。
どうしても合致する概念が無いならCollectionクラスを定義します。
ルーティング(とコントローラ)について。
「複数のタスクをまとめて操作」なのでいわゆるバルクアップデートですね。
CRUDを素直に考えると、コレクションリソースである tasks への PUT/PATCH になります。なのでそれを特別なアクションに割り当てる。
# config/routes.rb
resources :tasks
patch :tasks, to: 'tasks#bulk_update'
→ PATCH /tasks(.:format) tasks#bulk_update
もっと細かく「まとめて完了」という操作だけに注目するなら、複数のタスクのステータスだけをリソースとして切り出す。
# config/routes.rb
resources :tasks
namespace :tasks do # resources のネストでも書けるけどシンプルにならない
resource :status_attribute, only: %i(show update)
end
→ PATCH /tasks/status_attribute(.:format) tasks/status_attributes#update
僕ならこのどちらかにします。
諸手を上げて賛成もできないのですが、DHHのgistにあったので貼っておきます