Railsは、getアクションによってレンダリングされたページと新しいアクションによってレンダリングされたページの両方で使用できるフォームパーシャルを生成します。前者の場合、フォームのメソッドはPUTに設定され、後者の場合、フォームのアクションはPOSTに設定されます。
レールはどの方法を使用するかをどのように決定しますか?
Railsは、getアクションによってレンダリングされたページと新しいアクションによってレンダリングされたページの両方で使用できるフォームパーシャルを生成します。前者の場合、フォームのメソッドはPUTに設定され、後者の場合、フォームのアクションはPOSTに設定されます。
レールはどの方法を使用するかをどのように決定しますか?
フォームに渡されるオブジェクトがである場合persisted?
、フォームビルダーは、オブジェクトを更新していることを認識しているため、PUT
アクションをレンダリングします。永続化されていない場合は、新しいオブジェクトを作成していることを認識し、を使用しますPOST
。
<%= form_for @user do |f| %>
<%= f.button %>
<% end %>
@user
が新しいレコードの場合は、POST
が使用され、ボタンのラベルはになります。Create User
それ以外の場合は、PUT
が使用され、ラベルはになりUpdate User
ます。それ以上のものはありません。
既存のリソースを編集するフォームは使用PUT
し、新しいリソースを作成するフォームは使用しますPOST
。ここで説明されているREST標準に従って。
Railsform_for
ヘルパーコードから:
action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :put] : [:new, :post]
persisted?
ActiveRecordの場合は次のように宣言されます。
!(new_record? || destroyed?)