簡體   English   中英

Ruby on Rails教程混淆了Params hash的工作原理

[英]Ruby on Rails Tutorial Confused about how Params hash works

所以我看到其他人一直把我弄糊塗了,我已經閱讀了其他答案,但我仍然感到困惑。

在刪除請求期間如何將信息存儲和解析為params哈希? 我理解它在向其提交信息方面的工作原理。 即,當發出Put,Post或Get請求時,我理解信息通過params散列傳遞給相應的控制器動作。

但是,基於用戶partial(_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 hash如何獲取存儲在其中的用戶ID。 我知道它是否是params [:user] [:id],因為我們發布了具有其屬性列表的用戶。 但是,我不知道如何將id直接存儲到params哈希中。 這一直困擾我一段時間,所以請任何見解將不勝感激。

這是rails的工作方式。 如果你做一個rake routes你會看到你得到像DELETE /users/:id這樣的東西。

這意味着您作為參數傳遞的用戶對象被解釋為:id 當Rails看到這一點時,它會知道它必須查看傳遞的對象的ID,按照慣例,所有模型都有一個ID字段。

它基於rails路由模型。

如果您使用資源:config / routes.db中的user,它將創建以下路由(您可以通過運行rake路由來查看它):

刪除users /:id

符號:id表示在用戶/調用url后添加的任何內容都將在params中設置為:id。 (在這種情況下,對於DELETE HTTP動詞)

因此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

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM