Ruby
Rails
Rails6

Rails6 のちょい足しな新機能を試す21(html_safe編)


はじめに

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 な文字列として処理されていることがわかります。

2019-05-19-091744_414x128_scrot.png


Rails 5 では?

Rails 5.2.3 では、抜き出した文字列の html_safe?false になるため、以下のようにエスケープ処理されてしまいます。

2019-05-19-091825_466x63_scrot.png

試したソースは以下にあります。

https://github.com/suketa/rails6_0_0rc1/tree/try021_html_safe


参考情報