form_with

参考:

form_with – ActionView::Helpers::FormHelper | Ruby on Rails API [Official]

使い方

URL を指定する例

<%= form_with url: create_post_path do |form| %>
  <%= form.text_field :title %>
<% end %>

新規のモデルを指定する例

<%= form_with model: Post.new do |form| %>
  <%= form.text_field :title %>
<% end %>

既存のモデルを指定する例

<%= form_with model: Post.first do |form| %>
  <%= form.text_field :title %>
<% end %>

デフォルトで  rails-ujs による XHR リクエストになる。通常のリクエストとして送信するためには、local: true を指定する。

参考:

form_with でシンプルなサーチフォームを作成する | deadwood

Rails5 の form_with のデータの行き先 – Qiita

‘form_with’ API ドキュメント完全翻訳 | TechRacho

Rails の form helper 周りのコードリーディング | freedom-man

(新) form_with と (旧) form_tag, form_for の違い – Qiita

form_with — Building HTML forms in Rails 5.1 | Martin Rodriguez

Rails 5.1’s form_with vs. form_tag vs. form_for | Patrik on Rails

local: true

参考:

Rails 5.1 の form_with を使ってうまく redirect できないあなたへ | ひよっこエンジニアの雑多な日記

AJAX リクエストを送信する

参考:

rails-ujs と form_with の使い方 | ボクココ

form_with_generates_ids

form_with_generates_ids のデフォルト値は configtrue に設定されている。form_withid を生成しないようにするためには config の設定が必要。

# initializers/action_view.rb
Rails.application.config.action_view.form_with_generates_ids = false

エンジンの場合の設定

# initializers/action_view.rb
MyEngine::Engine.config.action_view.form_with_generates_ids = false

参考:

form_with_generates_ids – rails/configuration.rb at v5.2.2 · rails/rails – GitHub

check_box と label を要素に ID を設定せずに使う

参考:

Rails 5.1 の新しい form_with ヘルパーは INPUT 要素に id 属性を設定しない | Sooey

フォームヘルパーとフォームビルダーの関係

参考:

Rails の form helper 周りのコードリーディング | freedom-man

Turbolinks と Ajax を使用した際の redirect_to

クライアントサイドで Turbolinks.visit を実行するコードを返す。

参考:

turbolinks と form_with を便利に使うための gem を作った | おもしろ web サービス開発日記

Turbolinks と Ajax を使用した際のエラー処理

参考:

turbolinks と form_with を便利に使うための gem を作った | おもしろ web サービス開発日記

Turbolinks 5 and form errors | Koffeinfrei

turbolinks-form

参考:

hsgubert/turbolinks-form: Turbolinks 5 extension to render form errors after a submit – GitHub

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA