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

标签 ruby-on-rails ruby

我有一个关于 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/

相关文章:

ruby-on-rails - Rails 4 - Paperclip - 使用 DATA URI 上传图像

ruby-on-rails - 如何在 Rails 应用程序和客户端之间共享数据(始终可用)

ruby-on-rails - 为什么 Rails 不写入 development.log

ruby-on-rails - Rails 中的属性和构造函数

ruby-on-rails - 向 rails aasm 状态添加验证

ruby-on-rails - rails - 以字符串形式获取 YYYY-MM-dd 日期格式

ruby - YAML/ ruby : Get the first item whose <field> is <value>?

ruby - 通过 API 和 ruby​​ 创建优惠券返回错误 : woocommerce_api_missing_coupon_data

ruby - 服务器成功启动后如何以编程方式打开网络浏览器

Ruby & Postgresql LIKE 用于字符串和小数