Rails において共通の処理を切り出して記述する仕組みが、Concern だそうだ。
こちらを触ってみたい。
目次
実行環境
- windows
- Windows10 ver.1909
- Mac
- macOS Mojave 10.14.4
参考
concern ってなんだよ
「コンサーン」ってなんだよ。と正直思った。
翻訳をかけると、「懸念」という訳が出る。
開発者の懸念事項をまとめておくということだけど、ネーミングに納得感はあまりないというのが率直な感想。
concern を導入
今回は、以下の 2 つの User と Food モデル共通処理を concern にまとめてみます。
- 最近変更された順に上位 3 個を取り出す
実装(scope 追加)
app\models\concerns\filter.rb
を新規に作成する。
ファイル名と、Module 名は合わせることには注意する。
1 | module Filter |
app\models\user.rb
を編集する。
1 | class User < ApplicationRecord |
app\models\food.rb
を編集する。
1 | class Food < ApplicationRecord |
app\controllers\users_controller.rb
を編集する。
1 | class UsersController < ApplicationController |
1 | class FoodsController < ApplicationController |
(確認用なので、コントローラでの利用は User だけとしておく)
確認(scope 追加)
bundle exec rails s
で起動し、localhost:3000/users
とすると、直近更新した 3 件のみ表示されるようになったことが確認できます。localhost:3000/foods
でも、直近更新した 3 件のみ表示されるようになったことが確認できます。
本来ならば、画面を切り分けるところですが、まぁ確認なので index で直近 3 件しか出なくてもいいこととしましょう。
concern を使って処理の共通化を試みてみました。
まだまだ使いこなせているとは思えませんが、うまく使っていきたいところです。
ではでは。