form_with に渡すオプションについて見てみる

参考:https://github.com/rails/rails/blob/7252c2133f6f44085c64b1876cf41902e6a73847/actionview/lib/action_view/helpers/form_helper.rb#L483-L492

url オプション

f:id:matt-note:20181001230153p:plain

上記のように、form_with メソッドに、url: posts_path をオプションで与えると、action="/posts" method="post" data-remote="true" を作成するとのこと。

やはりデフォルトでリモートが true になるのだなと。

url オプションが一番シンプルに記述できて、一番シンプルなフォームになる。

 

scope オプション

f:id:matt-note:20181001225802p:plain

scope オプションに指定した値が inputフィールドの name属性の値のプレフィックスになる。上の設定の場合、form_with メソッドには、別途 url オプションが必要になる。

 

model オプション

f:id:matt-note:20181001225953p:plain

model オプションは、url オプションと scope オプションをひとまとめにして処理できる。model オプションを使うのが、一番すっきり記述できるかも。とはいえ、url と scope を使った場合は、意味がより明確でわかりやすい気もする。

というわけで、url と scope オプションの機能について理解して、その2つをまとめて処理できるのが model オプションと覚えておくと良い気がする。

 

model オプションに配列を渡す場合

以下のように、model: [ :admin, @post ] のように指定すると、admin_post_url にフォームの値を渡すようになるとのこと

f:id:matt-note:20181016101026p:plain

 

以下のようなルーティングの時、

f:id:matt-note:20181016130236p:plain

フォームは以下のようになる

f:id:matt-note:20181016130349p:plain

このフォームを送信すると、以下のように処理される

f:id:matt-note:20181016130548p:plain

 

その他の参考:

ActionView::Helpers::FormHelper