ruby「ブロック」の railsでのユースケースについて
背景
rubyの「ブロック」について学習しているときに、railsではどのような形で使用されているのか頭の中を整理するため下記にまとめてみました。
ブロックとは?
メソッドの呼び出しの際に引数と一緒に渡すことができる do~endや{ }などで表現された処理のかたまりのことです。
railsでの主なユースケースは以下の通りです。
railsでのユースケース
①ルーティング
get '/posts/:id', to: 'posts#show', as: 'post' do
# ブロック内の処理
end
この例では、 get
メソッドを使用して、 /posts/:id
にアクセスした場合に、PostsController
の show
アクションを呼び出すようにルーティングを設定しています。
as
オプションを使用することで、 post_path
などのヘルパーメソッドを使用することができます。また、ルーティングのブロック内には、認証処理などの共通処理を記述することができます。
②scope(スコープ)
class Article < ApplicationRecord
scope :created_since, -> (time) { where('created_at >= ?', time) }
end
上記の例では、created_sinceという scope を作成し、time という引数で指定された日時以降に作成されたレコードのみを取得するようになります。
③コールバック
(https://railsguides.jp/active_record_callbacks.html)
class User < ApplicationRecord
after_create do |user|
# ブロック内の処理
end
end
コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。 コールバックを利用することで、Active Recordオブジェクトが作成・保存・更新・削除・検証・データベースからの読み込み、などのイベント発生時に常に実行されるコードを書けるようになります。
ActiveRecordモデルに対してコールバックを定義する際に、ブロックを使用することができます。
この例では、 after_create
コールバックを使用して、ユーザーが作成された後に実行する処理を定義しています。コールバック内のブロックには、実行する処理を記述することができます。
④ビューヘルパー
(http://www.code-magagine.com/?p=7524#:~:text=ビューヘルパーとは?,してみましょう。)
<%= form_with(model: @post) do |form| %>
# ブロック内の処理
<% end %>
form_withメソッドを使用して、 @post
をモデルとして持つフォームを作成しています。 form_with
メソッドには、ブロックが渡されており、ブロック内にはフォームの内容を指定する処理が記述されます。
⑤Enumerableモジュール
(配列、範囲、ハッシュなどのオブジェクトを列挙できるようにするための機能を提供するモジュール)
numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.map {|n| n ** 2 }
p squared_numbers #=> [1, 4, 9, 16, 25]
上記の例では、配列 numbers の要素を順に処理して、その要素を2乗した値を配列に格納するという処理を行っています。
他にもrailsでブロックを用いる場面はあると思いますが、よく見かけるのはこの辺かなと個人的には思います。以上がrailsでのブロックのユースケースの説明となります。
まとめ
今回「ブロック」の railsでのユースケースについてまとめて紹介いたしました。
調べて整理してみると、多くの場面で使用されていることに気づき、ブロックの重要性を再確認することができました。
今後は今回まとめたことを思い出しながら、ブロックを使用したり、ブロックで置き換えることができないか開発を進めていきたいです。
Discussion