captureを使ってform_withのようにblockを活用したヘルパーメソッドを作る 842 views Post @wakairo 2024/04/18 11:01 最終更新 2024/04/18 11:14 背景 Railsのactionviewのヘルパー関数には、form_withのように、blockを活用して入れ子のHTML要素を記述できる便利なヘルパーメソッドがあります。 具体的には、以下のような記述(Railsガイドより引用)が出来るヘルパーメソッドです。 <%= form_with url: "/search", method: :get do |form| %> <%= form.label :query, "Search for:" %> <%= form.text_field :query %> <%= form.submit "Search" %> <% end %> blockを用いてHTML要素の入れ子を出力できるこのようなヘルパーメソッドの自作に関する話です。 作り方 actionviewのcaptureというヘルパーメソッドを用いると、form_withのように、blockを使ってHTML要素の入れ子を記述できるヘルパーメソッドを自作できます。 ちなみに、このcaptureは、Railsガイドを読んでも、RailsのAPIドキュメントを読んでも、いまいち使い道が分かっていなかったのですが、このような自作ヘルパーで使うというのが1つの使い道のようです。 自作ヘルパーメソッドの実装例def some_helper(content=nil, &block) object_passed_to_block = 'hello, capture' content = capture(object_passed_to_block, &block) if block tag.div(content, class: 'some-class') end 自作ヘルパーメソッドの利用例ERBから利用<%= some_helper do |object| %> <p><%= object %></p> <% end %> 出力結果<div class="some-class"> <p>hello, capture</p> </div> Rubyのコード内から利用some_helper do |object| tag.p(object) end 出力結果<div class="some-class"><p>hello, capture</p></div> Rubyのコード内からblockなしで利用some_helper('123') 出力結果<div class="some-class">123</div>
@wakairo 2024/04/18 11:01 最終更新 2024/04/18 11:14 背景 Railsのactionviewのヘルパー関数には、form_withのように、blockを活用して入れ子のHTML要素を記述できる便利なヘルパーメソッドがあります。 具体的には、以下のような記述(Railsガイドより引用)が出来るヘルパーメソッドです。 <%= form_with url: "/search", method: :get do |form| %> <%= form.label :query, "Search for:" %> <%= form.text_field :query %> <%= form.submit "Search" %> <% end %> blockを用いてHTML要素の入れ子を出力できるこのようなヘルパーメソッドの自作に関する話です。 作り方 actionviewのcaptureというヘルパーメソッドを用いると、form_withのように、blockを使ってHTML要素の入れ子を記述できるヘルパーメソッドを自作できます。 ちなみに、このcaptureは、Railsガイドを読んでも、RailsのAPIドキュメントを読んでも、いまいち使い道が分かっていなかったのですが、このような自作ヘルパーで使うというのが1つの使い道のようです。 自作ヘルパーメソッドの実装例def some_helper(content=nil, &block) object_passed_to_block = 'hello, capture' content = capture(object_passed_to_block, &block) if block tag.div(content, class: 'some-class') end 自作ヘルパーメソッドの利用例ERBから利用<%= some_helper do |object| %> <p><%= object %></p> <% end %> 出力結果<div class="some-class"> <p>hello, capture</p> </div> Rubyのコード内から利用some_helper do |object| tag.p(object) end 出力結果<div class="some-class"><p>hello, capture</p></div> Rubyのコード内からblockなしで利用some_helper('123') 出力結果<div class="some-class">123</div>
背景
Railsのactionviewのヘルパー関数には、
form_with
のように、blockを活用して入れ子のHTML要素を記述できる便利なヘルパーメソッドがあります。 具体的には、以下のような記述(Railsガイドより引用)が出来るヘルパーメソッドです。blockを用いてHTML要素の入れ子を出力できるこのようなヘルパーメソッドの自作に関する話です。
作り方
actionviewの
capture
というヘルパーメソッドを用いると、form_with
のように、blockを使ってHTML要素の入れ子を記述できるヘルパーメソッドを自作できます。ちなみに、この
capture
は、Railsガイドを読んでも、RailsのAPIドキュメントを読んでも、いまいち使い道が分かっていなかったのですが、このような自作ヘルパーで使うというのが1つの使い道のようです。自作ヘルパーメソッドの実装例
自作ヘルパーメソッドの利用例
ERBから利用
出力結果
Rubyのコード内から利用
出力結果
Rubyのコード内からblockなしで利用
出力結果