gpt4 book ai didi

ruby-on-rails - 为什么在不传递 :id param work (in rails)? 的情况下重定向到 #show 操作

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:39 24 4
gpt4 key购买 nike

我有一个关于 Rails 的简单问题。

我遵循了一个教程(来自 CrashLearner)。在该教程中,我们有一个简单的资源 message,它生成常规的后续路线(摘自 rake routes)

      Prefix Verb   URI Pattern                  Controller#Action
messages GET /messages(.:format) messages#index
POST /messages(.:format) messages#create
new_message GET /messages/new(.:format) messages#new
edit_message GET /messages/:id/edit(.:format) messages#edit
message GET /messages/:id(.:format) messages#show
PATCH /messages/:id(.:format) messages#update
PUT /messages/:id(.:format) messages#update
DELETE /messages/:id(.:format) messages#destroy

据我所知,到达此 Controller 的 show 操作的路径类似于 /messages/17,我的意思是我们必须放置 :我们要查看的特定消息的 ID

因此,如果我需要在用户修改消息 View 后将其重定向到此消息 View (在 #update 操作中),我应该使用:

redirect_to message_path(17)

但事实证明,省略这个 :id 实际上效果很好:

redirect_to message_path

为什么以及最后一个如何工作?

因为这是从一个实际接收 :id 参数的 Action 开始的,所以我想 Controller 将它保存在内存中,并在默认情况下在后台传递它缺少但我想了解这种行为从何而来?

我在 Rails 文档中找不到任何内容。

这里是教程的github仓库,所以上面那行的具体位置是here in this controller .

我确认这有效。

还有一个 Comment 资源,它嵌套自先前的 Message 资源。如你所见in that controller on the update action ,在更新评论(嵌套在消息中)后, Controller 重定向到 message_path 但在这种情况下 :id 参数通过实例变量 存在@message (我了解到这是有效的,因为对象 Message 响应 .id 方法,否则它应该是 @message。 id)

我想为什么这里 :id 仍然通过的原因是因为我们在 Comments Controller 和 :id无法在幕后传递另一个资源,因此明确编写了它。

我没有其他解释..

谁能给我解释一下为什么会这样?

最佳答案

我在 Rails source 中找到了这个:

Missing routes keys may be filled in from the current request's parameters (e.g. +:controller+, +:action+, +:id+ and any other parameters that are placed in the path).

所以这里的:id存在于当前请求的params中,用于这条路由。

关于ruby-on-rails - 为什么在不传递 :id param work (in rails)? 的情况下重定向到 #show 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40785322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com