Action View CHANGELOG(v7.1.0.beta1)
Fix: simple_format with blank wrapper_tag option returns plain html tag. by akhilgkrishnan · Pull Request #49120 · rails/rails
simple_format
に空のwrapper_tag
オプションを渡すと素のHTMLタグが返される問題を修正。デフォルトの
simple_format
は、<p>
で囲んだテキストを返す。しかしwrapper_tag: nil
オプションを指定すると<></>
タグで囲まれたテキストが返されていた。修正前:
simple_format("Hello World", {}, { wrapper_tag: nil }) # <>Hello World</>
修正後:
simple_format("Hello World", {}, { wrapper_tag: nil }) # <p>Hello World</p>
Akhil G Krishnan, Junichi Ito
同CHANGELOGより
参考: Rails API simple_format
-- ActionView::Helpers::TextHelper
Don't double-encode nested field_id
and field_name
index by seanpdoyle · Pull Request #47436 · rails/rails
ネストした
field_id
やfield_name
の添字の値を二重エンコードしないよう修正。ビューのヘルパーメソッド
field_id
とfield_name
に、index: @options
をデフォルトのキーワード引数として渡すようになった。Sean Doyle
同CHANGELOGより
参考: 週刊Railsウォッチ20230802: ネストしたfield_id
とfield_name
の添字の値を二重エンコードしないようになった
Allow opting in/out of Link preload
headers when calling stylesheet_link_tag
or javascript_include_tag
by ghiculescu · Pull Request #48553 · rails/rails
stylesheet_link_tag
やjavascript_include_tag
の呼び出しでLink preload
ヘッダーをオン/オフできるようになった。# コンフィグで有効になっていてもヘッダーをオフにする javascript_include_tag("http://example.com/all.js", preload_links_header: false) # コンフィグで無効になっていてもヘッダーをオンにする stylesheet_link_tag("http://example.com/all.js", preload_links_header: true)
Alex Ghiculescu
同CHANGELOGより
参考: 週刊Railsウォッチ20230802: Linkヘッダーのプリロードをオンオフできるようになった
Stop appending preload links once the head is already 1kB by casperisfine · Pull Request #48405 · rails/rails
プリロードが1KBに達したら
Link preload
ヘッダーの生成を止めるようになった。一部のプロキシで巨大ヘッダーの処理に問題が生じているが、さらに重要なことは、
Link preload
の効果は時とともに減少していくため、使いすぎは望ましくない。より厳密な制御が必要な場合は、自動プリロード生成を無効にし、コントローラーやミドルウェアから手動でプリロードを生成することが推奨される。
Jean Boussier
同CHANGELOGより
Handle sanitize_options
in simple_format
helper by faraquet · Pull Request #48355 · rails/rails
simple_format
ヘルパーで:sanitize_options
を扱えるようになった。サニタイズに追加したい任意のオプションを追加できる。変更前:
simple_format("<a target=\"_blank\" href=\"http://example.com\">Continue</a>") # => "<p><a href=\"http://example.com\">Continue</a></p>"
変更後:
simple_format("<a target=\"_blank\" href=\"http://example.com\">Continue</a>", {}, { sanitize_options: { attributes: %w[target href] } }) # => "<p><a target=\"_blank\" href=\"http://example.com\">Continue</a></p>"
Andrei Andriichuk
同CHANGELOGより
参考: 週刊Railsウォッチ20230621: simple_format
に:sanitize_options
が追加
Update Action View to use HTML5 standards-compliant sanitizers by flavorjones · Pull Request #48293 · rails/rails
HTML5標準に準拠したサニタイザのサポートが追加された。Rails 7.1ではデフォルトで
Rails::HTML5::Sanitizer
が使われる(サポートされている場合)。Action Viewで使うHTMLサニタイザは、
config.action_view.sanitizer_vendor
で設定可能。サポートされている値は以下のいずれか。
Rails::HTML4::Sanitizer
Rails::HTML5::Sanitizer
Rails 7.1では、サポートされている場合にこのコンフィグを
Rails::HTML5::Sanitizer
に設定し、Rails::HTML4::Sanitizer
にフォールバックする。従来のデフォルトはRails::HTML4::Sanitizer
。Mike Dalessio
同CHANGELOGより
参考: 週刊Railsウォッチ20230621: Action Viewのサニタイザが更新されてHTML Living Standard(旧HTML5)準拠になった
Introduce config.dom_testing_default_html_version
and use Rails::Dom::Testing
to parse HTML in test helpers by flavorjones · Pull Request #48682 · rails/rails
ActionView::TestCase#document_root_element
で使われるHTMLパーサーが以下のコンフィグで制御されるようになった。config.dom_testing_default_html_version
これにより、
Rails::Dom::Testing
のアサーションで使われるDOMが作成されるようになる。Rails 7.1のデフォルト設定では、ブラウザのユーザーエージェントでDOM表示をより正確に表現できる
HTML5
パーサーが使われる(サポートされている場合)。従来は、このテストヘルパーで常にNokogiriのHTML4
パーサーが使われていた。Mike Dalessio
同CHANGELOGより
参考: 週刊Railsウォッチ20230823: config.dom_testing_default_html_version
が追加
参考: - config.dom_testing_default_html_version
-- Rails アプリケーションを設定する - Railsガイド
Add a picture_tag helper by jpbalarini · Pull Request #48100 · rails/rails
HTMLの
picture
タグのサポートが追加された。このタグにはString、Array、またはBlockを渡すことが可能。
img
タグに:image
キーを介して直接プロパティを渡せる。
picture
タグにはimg
タグが必要なため、提供する最後の要素がimg
タグに使われる。
ブロックを渡すことでpicture
タグ全体を完全に制御することも可能。これにより、tag
内のコンテンツが適切に設定される。単一の画像ソースは以下のように指定できる。
<%= picture_tag("picture.webp") %>
上によって以下のHTMLが生成される。
<picture> <img src="/images/picture.webp" /> </picture>
複数の画像ソースは以下のように指定できる。
<%= picture_tag("picture.webp", "picture.png", :class => "mt-2", :image => { alt: "Image", class: "responsive-img" }) %>
上によって以下のHTMLが生成される。
<picture class="mt-2"> <source srcset="/images/picture.webp" /> <source srcset="/images/picture.png" /> <img alt="Image" class="responsive-img" src="/images/picture.png" /> </picture>
以下のようにブロックを使うことで完全に制御できる。
<%= picture_tag(:class => "my-class") do %> <%= tag(:source, :srcset => image_path("picture.webp")) %> <%= tag(:source, :srcset => image_path("picture.png")) %> <%= image_tag("picture.png", :alt => "Image") %> <% end %>
上によって以下のHTMLが生成される。
<picture class="my-class"> <source srcset="/images/picture.webp" /> <source srcset="/images/picture.png" /> <img alt="Image" src="/images/picture.png" /> </picture>
Juan Pablo Balarini
同CHANGELOGより
参考: 週刊Railsウォッチ20230607: HTMLのpicture
タグをサポート
Remove deprecated support to instance variables as locals to partials · rails/rails@8241178
インスタンス変数をlocalsとしてパーシャルに渡せる非推奨の振る舞いを削除。
Rafael Mendonça França
同CHANGELOGより
参考: 週刊Railsウォッチ20210222: render 'partial'
でのインスタンス変数代入が非推奨化された
Remove deprecated constant ActionView::Path
· rails/rails@23344d4
非推奨化された
ActionView::Path
定数を削除。Rafael Mendonça França
同CHANGELOGより
token_list
: Guard Stimulus' data-action
from multiple escapes by seanpdoyle · Pull Request #47318 · rails/rails
token_list
でHTMLエスケープが呼び出されすぎないよう保護。Sean Doyle
同CHANGELOGより
参考: 週刊Railsウォッチ20230307: token_list
ヘルパーでStimulusのdata-action
を余分なエスケープから保護する
Allow f.select
to be called with a single hash containing options and HTML options by ghiculescu · Pull Request #46629 · rails/rails
select
の呼び出しで、オプションとHTMLオプションを単一のハッシュに含めて渡せるようになった以前は以下の書き方では動作しなかった。
<%= select :post, :author, authors, required: true %>
そのため、以下のように書く必要があった。
<%= select :post, :author, authors, {}, required: true %>
修正後は、HTMLの
required
、multiple
、size
属性についてどちらの書き方も可能になった。Alex Ghiculescu
同CHANGELOGより
参考: §3 セレクトボックスを簡単に作成する -- Action View フォームヘルパー - Railsガイド
Fix Issue #46677 by kryzhovnik · Pull Request #46678 · rails/rails
日時のフォームヘルパー(
time_field
、date_field
、datetime_field
、week_field
、month_field
)の:value
オプションにTime
/Date
/DateTime
のインスタンスを渡せるようになった。修正前:
<%= form.datetime_field :written_at, value: Time.current.strftime("%Y-%m-%dT%T") %>
修正後:
<%= form.datetime_field :written_at, value: Time.current %>
Andrey Samsonov
同CHANGELOGより
参考: Rails API ActionView::Helpers::FormHelper
Add support for HTML attributes of optgroups to select helper by cgunther · Pull Request #43019 · rails/rails
select
ボックスの選択肢でグループ化またはネストしたコレクションを使う場合、オプションでHTML属性を子配列の最後の要素として含められるようになった。<%= form.select :foo, [["North America", [["United States","US"],["Canada","CA"]], { disabled: "disabled" }]] %> #=> <select><optgroup label="North America" disabled="disabled"><option value="US">United States</option><option value="CA">Canada</option></optgroup></select>
Chris Gunther
同CHANGELOGより
参考: #43019はRails 7.0.5に含まれています。
Support checked
as a keyword argument in check_box_tag
and radio_button_tag
by ghiculescu · Pull Request #45527 · rails/rails
check_box_tag
とradio_button_tag
にchecked
をキーワード引数として渡せるようになった。
FormHelper
系のAPIとの一貫性を高めるため。checked
は位置引数としてもキーワード引数としても指定可能になった。= check_box_tag "admin", "1", false = check_box_tag "admin", "1", checked: false = radio_button_tag 'favorite_color', 'maroon', false = radio_button_tag 'favorite_color', 'maroon', checked: false
Alex Ghiculescu
同CHANGELOGより
参考: 週刊Railsウォッチ20221115: check_box_tag
とradio_button_tag
でchecked:
キーワード引数が利用可能になった
[FIX #46021] Allow passing classes to dom_id by goulvench · Pull Request #46068 · rails/rails
dom_id
にクラスを直接渡せるようになった。今後は
dom_id
にクラスを渡すときにnew
を呼ぶ必要はなくなる。
これにより、dom_id
のこの振る舞いはdom_class
に近くなる。
入力量が少なく済むのみならず、文字列を生成するためだけにRubyが新しいオブジェクト全体をインスタンス化せずに済むようになる。変更前:
dom_id(Post) # => NoMethodError: undefined method `to_key' for Post:Class
変更後:
dom_id(Post) # => "new_post"
Goulven Champenois
同CHANGELOGより
参考: 週刊Railsウォッチ20221011: dom_id
にクラスを渡せるようになった
Add :locals
to ActionView rendering instrumentation by aarongough · Pull Request #45977 · rails/rails
Action Viewの
render
のinstrumentationで返されるデータに:locals
も含まれるようになった。変更前:
{ identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb", layout: "layouts/application" }
変更後:
{ identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb", layout: "layouts/application", locals: {foo: "bar"} }
Aaron Gough
同CHANGELOGより
参考: 週刊Railsウォッチ20221003: Action Viewレンダリングのinstrumentationが返すデータに:localsも出力可能になった
Replace rstrip with chomp!(break_sequence) in word_wrap by maxim · Pull Request #45942 · rails/rails
word_wrap
におけるbreak_sequence
(改行シーケンス)の削除を最後に行うようになった。これにより、印刷可能文字を含む改行シーケンスが
word_wrap
で正しく削除されないバグが修正される。たとえば以下のテンプレートの出力は次のようになる。
# <%= word_wrap("11 22\n33 44", line_width: 2, break_sequence: "\n# ") %>
修正前:
# 11 # 22 # # 33 # 44 #
修正後:
# 11 # 22 # 33 # 44
Max Chernyak
同CHANGELOGより
参考: Rails API word_wrap
-- ActionView::Helpers::TextHelper
Allow templates to define which locals they accept by joelhawksley · Pull Request #45602 · rails/rails
テンプレートの
locals
を厳密に設定できるようになった。デフォルトでは、任意の
locals
をキーワード引数として渡せる。
テンプレートが受け取るべきlocals
を定義するには、以下のようにlocals
をマジックコメントの形で追加する。<%# locals: (message:) -%> <%= message %>
以下のようにデフォルト値も指定できる。
<%# locals: (message: "Hello, world!") -%> <%= message %>
以下のように書くと
locals
を完全に無効にできる。<%# locals: () %>
Joel Hawksley
同CHANGELOGより
参考: 週刊Railsウォッチ20220822: テンプレートが受け取れるローカル変数をマジックコメントで定義可能になった
Add include_seconds option to datetime_local_field. by morgoth · Pull Request #45188 · rails/rails
datetime_local_field
にinclude_seconds
オプションを追加。
include_seconds: false
を指定することで、入力フィールドの秒の部分を省略できるようになる。Wojciech Wnętrzak
同CHANGELOGより
参考: Rails 7.1に入る主要な機能まとめ(1): datetime_field
にinclude_seconds
オプションが追加された
参考: Rails API datetime_field
-- ActionView::Helpers::FormHelper
Support calls to #field_name
with nil object_name
by seanpdoyle · Pull Request #45366 · rails/rails
ActionView::Helpers::FormTagHelper
の#field_name
呼び出しでobject_name
引数がnil
の場合でもエラーにならないようになった。<%= fields do |f| %> <%= f.field_name :body %> <% end %>
Sean Doyle
同CHANGELOGより
参考: この修正はRails 7.0.4に含まれています。
Strings returned from strip_tags
are correctly tagged html_safe?
by flavorjones · Pull Request #45218 · rails/rails
strip_tags
で返される文字列が正しくhtml_safe?
とタグ付けされるようになった。これらの文字列にはHTML要素が含まれず、基本的なエンティティもエスケープ済みなので、HTMLコンテンツ内のPCDATAとしてそのまま安全に含められる。レンダリング中に
SafeBuffer
に結合されるときに、エンティティが二重エスケープされるのを防ぐため、html-safe
としてタグ付けされる。修正: rails/rails-html-sanitizer#124
Mike Dalessio
同CHANGELOGより
参考: この修正はRails 7.0.4に含まれています。
参考: 週刊Railsウォッチ20220606: strip_tags
から返される文字列がhtml_safe?
で正しくタグ付けされるよう修正
Move convert_to_model
call from form_for
into form_with
by seanpdoyle · Pull Request #44468 · rails/rails
form_for
のconvert_to_model
呼び出しをform_with
に移動。
form_for
がform_with
で実装されるようになったので、convert_to_model
呼び出しをform_for
から削除した。Sean Doyle
同CHANGELOGより
参考: Implement form_for
by delegating to form_with
by seanpdoyle · Pull Request #43421 · rails/rails
参考: 週刊Railsウォッチ20220531: convert_to_model
呼び出しをform_for
からform_with
に移動
Fix and add protections for XSS in names. · rails/rails@649516c
ActionView::Helpers
とERB::Util
のXSS保護を修正および追加。タグヘルパーのタグ名や属性名に含まれる危険な文字をXML仕様に従ってエスケープする。従来の
:escape_attributes
オプションを:escape
にリネームし、オプションをタグ全体に適用することでシンプルにした。Álvaro Martín Fraguas
同CHANGELOGより
参考: このセキュリティ修正は7.0.2.4でリリース済みです。
参考: 週刊Railsウォッチ20220510: ActionView::Helpers
とERB::Util
のXSS修正と保護の追加
Extend audio_tag and video_tag to accept Active Storage attachments by MatheusRich · Pull Request #44085 · rails/rails
Active Storageの添付ファイルに
audio_tag
とvideo_tag
を渡せるようになった。これにより、以下のように書ける。
audio_tag(user.audio_file) video_tag(user.video_file)
従来は以下のように書かなければならなかった。
audio_tag(polymorphic_path(user.audio_file)) video_tag(polymorphic_path(user.video_file))
既にサポートされている
image_tag
と同じパターン。Matheus Richard
同CHANGELOGより
参考: 週刊Railsウォッチ20220328: audio_tag
やvideo_tag
にActiveStorage::Attachment
オブジェクトを渡せるようにした
form_for
: Attempt to call to_model
on first argument by seanpdoyle · Pull Request #44328 · rails/rails
form_for
に渡したモデルに対してto_model
呼び出しを試行するようになった。Sean Doyle
同CHANGELOGより
以前の変更については7-0-stableのCHANGELOGを参照。
関連記事
Rails 7.1に入る主要な機能まとめ(2)error_highlight対応、routes --grepほか(翻訳)
The post Rails 7.1.0 Action View CHANGELOG(翻訳) first appeared on TechRacho.
概要
MITライセンスに基づいて翻訳・公開いたします。
7.1.0リリーズ後に更新があれば反映します。
参考: Action View の概要 - Railsガイド