LoginSignup
1
0

More than 1 year has passed since last update.

Railsのtag.***形式タグヘルパーについて

Last updated at Posted at 2022-12-04

従来、Railsのビューでタグを書く場合に、tagcontent_tagの2つを使っていましたが、Rails 5.1ではtag.brのような新形式のメソッドが登場しています。

特徴

引数でなくメソッド形式でタグ名を与えるため簡潔になる、ということと、tagcontent_tagを使い分けずに済む、という点があります。

ソースコードから仕組みを探る

まず、tagメソッドを呼び出した際に、引数が一切なければtag_builderメソッドを呼んで、内部実装であるTagBuilderのインスタンスを生成します。

つまりh1pなどのメソッドは、このTagBuilderのインスタンスメソッドということになります。とはいえ、全部作っては面倒なのでmethod_missingの出番で、どんなメソッド名が来ても同じように処理していきます(tag.fooのようなでたらめな名前を指定しても動いてしまいます)。

そして、開きタグと閉じタグがセットになったタグと、<input>のような閉じタグなしで完結するものの2つがありますが、この区別は「中身の指定がないもの」かつ「既知のself-closingなタグ名にマッチするもの」だけが閉じタグなしで処理される流れになっていました。

すなわち、「JavaScriptをセットするための空の<div>を用意したい」というような場合や、「srcを指定した<script>を用意したい」など、開きタグ直後に閉じタグを作る用事でも、tag.div id: :hogeのように書けて、空の中身である''などを指定する必要はなくなっています。

その他特殊処理として、checkeddisabledなどのブール値属性はchecked="checked"のように展開することが行われています。

結論

よくわからないときは、ソースコードを読もう

外部リンク

1
0
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
1
0