はじめに
Rails 6 に追加されそうな新機能を試す第21段。 今回のちょい足し機能は、 String#html_safe
編です。
Rails 6.0 では、 html_safe?
が true
な文字列から []
でインデックスを指定して抜き出した部分文字列も html_safe?
が true となるようになりました。
Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease
でインストールできます。
$ rails --version
Rails 6.0.0.rc1
Rails プロジェクトを作る
$ rails new rails6_0_0rc1
$ cd rails6_0_0rc1
Controller と View を作る
controller と View を作ります。
$ bin/rails g controller html_safe index
HtmlSafeController#index
を修正する
controller で、html_safe な文字列を作成し、そこから一部を抜き出します。
app/controllers/html_safe_controller.rb
class HtmlSafeController < ApplicationController
def index
str = '<em>This is HTML safe string first part</em><strong>This is HTML safe string second part</strong>'.html_safe
i = str.index('<strong>')
@html_safe_str1 = str[0...i]
@html_safe_str2 = str[i..]
end
end
View を修正する
index.html.erb
で controller で抜き出した一部の文字列を表示します。
app/views/html_safe/index.html.erb
<h1>HtmlSafe</h1>
<p>
@html_safe_str1 = <%= @html_safe_str1 %>
</p>
<p>
@html_safe_str2 = <%= @html_safe_str2 %>
</p>
rails server を実行して表示する
bin/rails s
を実行してブラウザから http://localhost:3000/html_safe/index にアクセスします。
html safe な文字列として処理されていることがわかります。
Rails 5 では?
Rails 5.2.3 では、抜き出した文字列の html_safe?
が false
になるため、以下のようにエスケープ処理されてしまいます。
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try021_html_safe