Rails - データ作成時と更新時に、フォームからのリクエストでPOSTとPATCHをどうやって使い分けているのか?
Railsでフォームを記述すると、
- データの新規作成時には、POST
- データの更新時には、PATCH
とHTTPメソッドを使い分けていますが、これはどう判断しているのか?
結論
<%= form_for(@user) do |f| %>
上記のように渡されたインスタンス(例では@user)がデータベースに存在するか?を
フォーム作成時にActive Recordのnew_record?メソッドで判定している。
@user.new_record?
上記が
- trueを返した場合は、データが存在するのでPATCH
- falseを返した場合は、データが存在しないのでPOST
参考
tutorialの第10章のはじめの部分で記述あり
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-edit_form