CRUDの原則では、永続データに対する 4 つの基本操作が定義されています。
- 作成、
- 読んだ、
- アップデート、
- 消去。
HTTP 動詞も DELETE ワードを使用します。
Rails のデフォルト ルーティングで、HTTP 動詞DELETEに対応するアクションに「 destroy 」という単語が使用されるのはなぜですか?
CRUDの原則では、永続データに対する 4 つの基本操作が定義されています。
HTTP 動詞も DELETE ワードを使用します。
Rails のデフォルト ルーティングで、HTTP 動詞DELETEに対応するアクションに「 destroy 」という単語が使用されるのはなぜですか?
Rails は 4 つの標準メソッド (動詞) を使用します。
さらに、7 つの RESTful アクションがあります。
Rails は、対応するアクションと同じ動詞を使用することはありません。アクション destroy へのルーティングにより、コントローラー内の対応するアクションを通じて複数の DELETE を実行できるようになります。
次の railsguide に興味があるかもしれません: http://guides.rubyonrails.org/routing.html
説明
ブラウザーは、GET、POST、PUT、DELETE などの特定の HTTP メソッドを使用して URL を要求することにより、Rails からページを要求します。各メソッドは、リソースに対して操作を実行するためのリクエストです。リソース ルートは、関連する多数のリクエストを 1 つのコントローラー内のアクションにマップします。
ここで、データを読み取り/取得することを意味する HTTP GET 要求があるとします。アクションが動詞と同じ名前 (この場合は GET) を持っている場合、それは過度に単純化されます。GET は、show、index、new、または edit アクションへのアクセスを提供できます。それらはすべてデータを読み取りますが、アクション自体はまったく同じではありません。DELETE リクエストについても同じことが言えます。このリクエストはコントローラーを介して処理され、アクション内でさまざまな実装を持つことができます。投稿を破棄したいのかもしれませんが、ユーザー セッションからログアウトしたいのかもしれません。コントローラーを介して削除というアクションを実行するだけでは、それに関連する可能性を正当化することはできません。
編集
ブラウザーからのリクエストがどのように処理されるかについて詳しく知りたい場合は、Rails が使用する M(odel)V(iew)C(ontroller) モデルに関する情報を読むことができます。
http://www.youtube.com/watch?v=3mQjtk2YDkM&noredirect=1
と:
http://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/
このリンクからの引用:
ブラウザーは、http://mysite.com/video/show/15 などの要求を行い ます。Web サーバー (mongrel、WEBrick など) が要求を受け取ります。ルートを使用して、使用するコントローラーを見つけます。デフォルトのルート パターンは、config/routes.rb で定義されている「/controller/action/id」です。
つまり、最初のリクエストはWebサーバーを介して変換および処理され、破棄などの安らかなアクションが配置されているコントローラーを介して正しいルートを定義する必要があります。
Rails の初期の頃は、GET と POST という 2 つの動詞しかありませんでした (PUT と DELETE はサポートされていないため、後のバージョンの Rails では隠し変数を介して PUT と DELETE を追加することで解決されました。破棄アクションの名前は決して変更されませんでした。リクエストとアクションは別のものだからです。
Actions || show || create || update || destroy
SQL || select|| create || update || delete
REST || get || post || post || post
Actions || show || create || update || destroy
SQL || select|| create || update || delete
REST || get || post || put || delete
この引用はさらに興味深いかもしれません:
「ルーターは HTTP 動詞と URL を使用して着信要求を照合するため、4 つの URL が 7 つの異なるアクションにマップされます。」
モデルの部分については、 http : //www.nickpeters.net/2007/12/21/delete-vs-destroy/ からの優れた要約を次に示します。
delete メソッドは基本的に、データベースから行 (または行の配列) を削除します。一方、破棄すると、さらにいくつかのオプションが可能になります。まず、before_delete などのコールバックや、モデルで指定した依存関係をチェックします。次に、削除されたばかりのオブジェクトをメモリに保持します。これにより、「注文番号 {order.id} は削除されました」などのメッセージを残すことができます。最後に、最も重要なことは、そのオブジェクトに関連付けられているすべての子オブジェクトも削除されることです!
それを知っていれば、コントローラー内のアクションをモデル内のアクションと同じように呼び出すことだけが理にかなっています。削除は単純すぎます。
良い質問。
destroy
オブジェクトではなく、常に使用することを奨励しているように感じdelete
ます。
実際にdelete
は、コールバックはトリガーされません。
これは、Ryan Bates からの非常に初期の (2007 年) 回答です。
基本的に「削除」は、レコードを削除するためにクエリをデータベースに直接送信します。その場合、Rails は、削除しようとしているレコードに含まれる属性や、コールバック (before_destroy など) があるかどうかを認識しません。
「destroy」メソッドは渡された ID を受け取り、「find」メソッドを使用してデータベースからモデルを取得し、それに対して destroy を呼び出します。これは、コールバックがトリガーされることを意味します。
コールバックをトリガーしたくない場合、またはパフォーマンスを向上させたい場合は、「削除」を使用することをお勧めします。それ以外の場合 (そしてほとんどの場合)、"destroy" を使用する必要があります。