所以我看到其他人对此感到困惑,我已经阅读了其他答案,但我仍然感到困惑。
在删除请求期间,信息是如何存储和解析到参数散列中的?我了解它在向其提交信息方面的工作原理。即当发出 Put、Post 或 Get 请求时,我知道信息是通过 params hash 传递给相应的 Controller 操作的。
但是,基于用户部分 (_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 哈希中。这已经困扰我一段时间了,所以请提供任何见解。
最佳答案
这就是 Rails 的工作方式。如果您执行 rake routes
,您将看到类似 DELETE/users/:id
的内容。
这意味着您作为参数传递的用户对象被解释为 :id
。当 Rails 看到这个时,它会知道它必须查看传递的对象的 ID,按照惯例所有模型都有一个 ID 字段。
关于ruby-on-rails - Ruby on Rails 教程 对 Params 哈希的工作原理感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18001951/