4

だから私は他の人がこれについて私を混乱させているのを見てきました.私は他の答えを読みましたが、私はまだ混乱しています.

削除リクエスト中に、情報はどのように保存され、params ハッシュに解析されますか? 情報を送信することに関して、それがどのように機能するかを理解しています。つまり、Put、Post、または Get リクエストが発行されると、情報が params ハッシュを介してそれぞれのコントローラー アクションに渡されることを理解しています。

ただし、ユーザー部分 (_user.html.erb) の以下のコードに基づいています。

<li>
    <%= gravatar_for user, size: 52 %>
    <%= link_to user.name, user %>

    <% if current_user.admin? && !current_user?(user) %>
    <%= link_to "delete", user, method: delete,
                            data: {confirm: "You sure?"} %>
                            <% end %>
</li>

そして、自動的にルーティングされる DESTROY アクションのコード:

def destroy
  User.find(params[:id]).destroy
  flash[:success] = "User destroyed."
  redirect_to users_url
end

params ハッシュがユーザー ID を格納する方法がわかりません。属性のリストを持つユーザーを投稿しているので、それが params[:user][:id] であるかどうかはわかります。しかし、IDがparamsハッシュに直接格納される方法がわかりません。これはしばらく私を悩ませてきたので、洞察をいただければ幸いです。

4

3 に答える 3

3

それがレールの仕組みです。a を実行すると、 のrake routesような結果が得られることがわかりますDELETE /users/:id

これは、パラメータとして渡すユーザー オブジェクトが として解釈されることを意味します:id。Rails がこれを確認すると、渡されたオブジェクトの ID を調べる必要があることがわかります。慣例により、すべてのモデルには ID フィールドがあります。

于 2013-08-01T18:45:51.573 に答える
2

したがって、Rails は渡された URL を読み取り、それをどうするかを決定します。

慣例により、あなたがそれに渡すものは

:controller/:id

したがって、おそらく、URL を文字列として取り込み、文字に従って分解し/ます。

これを IRB で試してください。

controller, id = "hello/1".split("\/")

そして、入力します

id

この新しく設定された変数が次のようなハッシュidに渡されると想像してください。params

params = {}
params[:id] = id

今すぐ入力してください

params[:id]

真実はもっと複雑です。ソースを調べて特定の方法を見つけようとしましたが、あまりにも多くのことが起こっています。でこれをチェックしてみてくださいActionDispatch

http://api.rubyonrails.org/classes/ActionDispatch/Routing.html

幸運を!

于 2013-08-01T20:43:54.940 に答える