Rails 5.1 の新機能

Rails 5 の新機能おさらいしとこうと思ってググって以下のスライドを見ていたところ
思っていたよりも変更があってショック受けていたら、Rails 5.1 の資料でした。 フライングしちゃった気分だわ。
まだリリースされていないので、ご参考程度に。

Rails 5.1: upcoming features // Speaker Deck

気になるところ

tagが便利になる

New syntax for tag helpers i.e. tag.br instead of tag('br') #25195 by marekkirejczyk · Pull Request #25543 · rails/rails
tag 使ったことなかったですが、content_tag も tag で代用できるようです。
気持ち少し短く書けます。

# before
tag(:br, nil, true)

<%= content_tag :div, class: "strong" do -%>
  Hello world!
<% end -%>


# after
tag.br

<%= tag.div class: "strong" do -%>
  Hello world!
<% end -%>

新しいFormメソッド: form_with

Provide form_with as a new alternative to form_for/form_tag · Issue #25197 · rails/rails
なんと form_for / form_tag に代わる新しいメソッドが用意されるようです。
修正としては大きいですね。
デフォルト remote: true になるだとか。 既存のform_for / form_tag は、5系ではそのまま使えて、Rails6 からはdeprecate warning 対象予定とのこと。

以下のように content が存在しない場合の考慮ができるようです。
check_boxとかselectも簡単にかけるようになる?

# before
<%= form_for(@post) do |f| %>
  <%= f.text_field :title %>
  <%= f.text_area :content %>
<% end %>


# after
<%= form_with(model: @post) do |f| %>
  <%= f.text_field :title %>
  <%= f.text_area :content, "Overwrite @post.description if present, if not, it will still work" %>
<% end %>

capybara

WIP: Capybara Integration with Rails (AKA System Tests) by eileencodes · Pull Request #26703 · rails/rails
なんとcapybaraがデフォルトで利用できるようです。
setupの必要がなくなるとのこと。 puma/ selenium / chrome / port: 28100 / screen [1400, 1400] で動作し ドライバとしては以下のものが利用できるとのこと。 Capybara drivers: poltergeist, webrick, selenium (with no setup), and rack_test
screenshotとってくれたりするのは良いかも。

Add :fallback_string option to Array#to_sentence

Added :fallback_string option to Array#to_sentence by oss92 · Pull Request #25811 · rails/rails
日本人には馴染みがないかもしれませんが、Array#to_sentence というメソッドがあったようです。私も知りませんでした。

# before

["one", "two", "three"].to_sentence
# => "one, two, and three" なるほど readable

[].to_sentence
# => ""


# after
["one", "two", "three"].to_sentence(fallback_string: "none")
# => "one, two, and three" これは一緒

[].to_sentence(fallback_string: "none")
# => "none"