-
tag(:br)
の書き方は、将来のバージョンのRailsで廃止予定だそうです - Rails 5.1 から
tag.br
形式で書いた方がよいそうです - その方法は Nokogiri::HTML::Builder を使う方法に似ています
- tag.br と書くと
<br>
が生成されて<br />
にならないのはダメなんじゃ? と思いましたが HTML5 だとどっちでもいいそうです - tag メソッドと、tag インスタンスが共存しているような違和感がありましたが、tag メソッドに引数がないと TagBuilder.new を返す仕組みでした。(なので tag.br は TabBuilder.new.br を実行していることになる)
require "action_view"
include ActionView::Helpers::TagHelper
singleton_class.class_eval { attr_accessor :output_buffer }
tag(:br) # => "<br />"
tag.br # => "<br>"
tag.p # => "<p></p>"
tag.p class: "a" # => "<p class=\"a\"></p>"
tag.p "content", class: "a" # => "<p class=\"a\">content</p>"
tag.p(class: "a") { "content" } # => "<p class=\"a\">content</p>"
tag.xxx # => "<xxx></xxx>"
content_tag の方はレガシーではありませんが tag で書く方がわかりやすいです。
HTMLの予約語を内部で把握しているので br と違って p だと閉じタグを生成してくれます。
HTMLタグに応じてtag と content_tag の使い分けをしなくていいのがほんま楽です。
content_tag(:p, "xxx") # => "<p>xxx</p>"
tag.p "xxx" # => "<p>xxx</p>"
class だけを指定したい場合も tag の方が自然1に書けます。
content_tag(:div, "", class: "a") # => "<div class=\"a\"></div>"
tag.div class: "a" # => "<div class=\"a\"></div>"
content_tag だとこう書いてしまってなんじゃこれってなる罠があるので、この点でも tag の方が使いやすそうです。
content_tag(:div, class: "a") # => "<div>{:class=>"a"}</div>"
参照
The following format is for legacy syntax support. It will be deprecated in future versions of Rails. https://github.com/rails/rails/blob/9c35bf2a6a27431c6aa283db781c19f61c5155be/actionview/lib/action_view/helpers/tag_helper.rb#L193
<br />
じゃなくて <br>
だよ
http://qiita.com/irxground/items/dc3e688d7d48c01c3988
RailsでのHTML生成は、Nokogiri::HTML::Builderを使えばキレイに書ける(かも)
http://qiita.com/EastResident/items/140fafe234c7ee011391
-
slim で書いた方がもっと自然ですが ↩