0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails 5.1 Default Settings Changes

Posted at

Rails 5.1 Default Settings Changes

config.action_view.form_with_generates_remote_forms: true

# 以前の書き方
<%= form_for @post, remote: true do |f| %>

# Rails 5.1での新しい書き方
<%= form_with(model: @post) %>  # デフォルトでdata-remote="true"が付与

# 生成されるHTML
<form action="/posts" method="post" data-remote="true">
  ...
</form>

影響と問題パターン

  1. すべてのform_withがデフォルトで非同期送信になる
  2. JavaScriptを無効にしているブラウザでフォームが正しく動作しない可能性
  3. Turbolinksとの競合が発生する可能性

config.assets.unknown_asset_fallback: false

# 設定による違い
image_tag("missing_image.jpg")

# true の場合
# => /assets/missing_image.jpg を出力

# false の場合
# => Sprockets::Rails::Helper::AssetNotFoundError

影響と問題パターン

  1. 存在しない画像への参照時にエラーが発生するようになる
  2. 動的に生成される画像パスで問題が発生しやすい
  3. 開発環境とプロダクション環境で挙動が異なる可能性がある
  4. プレースホルダー画像の仕組みを使っている場合に修正が必要

対応策

# フォームの非同期送信を個別に制御
<%= form_with(model: @post, local: true) %>  # 同期送信

# アセット参照のエラーハンドリング
def asset_exist?(path)
  if Rails.configuration.assets.compile
    Rails.application.precompiled_assets.include? path
  else
    Rails.application.assets_manifest.assets[path].present?
  end
end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?