私はプットリクエストとポストリクエストの違いを読んでいますが、Railsに関連するいくつかの関連する質問があります:すでに作成された行の特定のフィールドを変更したい...プットまたはポストリクエストを使用する必要があります?たとえば、次の違いはありますか?
#Assume this is a put request
def update
@model=Model.find(x)
@model.field="new_field"
@model.save
end
#Assume this is a post request
def update
@model=Model.find(x)
@model.field="new_field"
@model.save
end
#What if I use the Rails update method?
def update
@model=Model.find(x)
@model.update(model_params)
@model.save
end
前もって感謝します。
Rails規則によると、
PUTは、既存のリソースを更新するために使用されます
POSTは、新しいリソースの作成に使用されます
Rails 4)では、混乱を避けるためにPUTがPATCHに変更されました。
Railsで生成されたルートは、デフォルトで次のようになります
posts GET /posts(.:format) {:action=>"index", :controller=>"posts"}
POST /posts(.:format) {:action=>"create", :controller=>"posts"}
new_post GET /posts/new(.:format) {:action=>"new", :controller=>"posts"}
edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"}
post GET /posts/:id(.:format) {:action=>"show", :controller=>"posts"}
PUT /posts/:id(.:format) {:action=>"update", :controller=>"posts"}
DELETE /posts/:id(.:format) {:action=>"destroy", :controller=>"posts"}
PUTとPOSTのアクションに注意してください
Railsはデフォルトで、REST仕様で規定されている方法でHTTP動詞を使用することを目的としています。メソッドで同じアクションを実行できる理由について心配する必要はありません。代わりに、 RESTfulでユーザーが理解できるAPIを提供することを検討してください。これらのデフォルトの動作はオーバーライドできます。
RESTは、次のことを示します。
POSTメソッドを使用したリクエストは、リソースコレクションに作用する必要があります。コレクションに新しいリソースを追加します。例のURL: http://example.com/resources
PUT HTTP動詞を使用するリクエストは、コレクション内の単一のリソースに作用する必要があります。サーバー上でリソース全体を置き換えるURLの例: http://example.com/resource/1
PATCH HTTP動詞を使用したリクエストは、コレクション内の単一のリソースに作用する必要があります。それが立っているリソースの特定の属性を更新するURLの例: http://example.com/resource/1
Rails 4は、リソースを更新するためにPUT動詞よりもPATCH動詞を利用するようになりました。
PATCHについても多くの混乱がありますが、JSON API標準がそれをどのように提案しているかに個人的に同意します http://jsonapi.org/format/#crud-updating :
PATCH /articles/1 HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"type": "articles",
"id": "1",
"attributes": {
"title": "To TDD or Not"
}
}
}
私はRails Iが大好きですが、実際には、いくつかのコアWeb規則に完全には準拠していません。Railsは生産性を高めようとしており、規則が厳しすぎると生産性が低下します。したがって、これに対する答えを探すときにやりすぎないでください。真実は、RailsはPUTとPATCHを同じように扱っており、明らかに両方が間違っているということです。
ただし、プロジェクト全体でPUTをどこでも使用している場合は、すべてを調べて変更する必要はありません。どちらか一方(PUTまたはPATCH)に固執するだけです。
[〜#〜]更新[〜#〜]
私はこのトピックについて2つの記事を書き、このトピックについて詳しく説明します。
PUTとPOSTはHTTPメソッドです。
Routers.rbで、methodとcontroller#actionをマップする必要があります。クラスでは、同じメソッドを3回定義します。したがって、これらのアクションをHTTPメソッドにマップする場合は、できません。
各メソッドの名前を変更し、実装をモデルクラスに変更します。