Railsのポリモーフィックでのform_with
form_withの引数
通常の場合のform_with の引数
code: (ruby)
# from_withの基本構文
form_with(model: 送信するモデル, url: 送信するURL, method: :HTTPメソッド)
model:
インスタンス変数を渡すことが多い
インスタンス変数を元にIDとクラスを自動認識する
url: を自動設定する
method: を自動設定する
url:
省略されていることが多い
reports_path(@report) のようになっている場合はURL内の:report_id のidの値を@report から自動認識する
method:
省略されていることが多い
例) Reportモデルへ送信するフォーム
code: (ruby)
<%= form_with(model: @report) do |form| %>
<!-- フォームのコンテンツ -->
<% end %>
ポリモーフィックの場合
ポリモーフィックな関係のform_with の引数
code: (ruby)
model
配列で指定
インスタンスでなくモデル名でもok
省略不可
url
配列で指定
polymorphic_url ヘルパーを使う
インスタンスでなくモデル名でもok
省略不可
method
コントローラーにRESTfulなアクションが正しく指定されていれば省略可
例) 親モデルに紐づいた子モデルのインスタンスを作成するフォーム
親モデル: Report
子モデル: Comment
code: (ruby)
<!-- フォームのコンテンツ -->
<% end %>
@comment はフォーム表示アクション内で@comment = Comment.new として空のインスタンスを作成している
保存されるインスタンス: @report
@reportのid、モデル名が保存される
保存するインスタンス: @comment(空インスタンス)
@report のid をcommentable_id に保存する
@report のモデル名 をcommentable_type に保存する
上記コードは以下のように省略して記述することも可能
code: (ruby)
<!-- フォームのコンテンツ -->
<% end %>
内部的にpolymorphic_path メソッドが行われている
model: に指定したモデルから自動的に送信先URLを生成している