加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 为什么重定向到#show动作而不传递:id param w

发布时间:2020-12-17 02:49:35 所属栏目:百科 来源:网络整理
导读:我有一个关于rails的简单问题. 我按照教程(来自CrashLearner). 在该教程中,我们有一条简单的资源消息,可生成常规的以下路由(摘自rake路由) Prefix Verb URI Pattern Controller#Action messages GET /messages(.:format) messages#index POST /messages(.:fo
我有一个关于rails的简单问题.

我按照教程(来自CrashLearner).
在该教程中,我们有一条简单的资源消息,可生成常规的以下路由(摘自rake路由)

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

据我所知,到达这个控制器的show动作的路径就像/ messages / 17,我的意思是我们必须把我们想要查看的特定消息的id:.

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

redirect_to message_path(17)

但事实证明,省略这个:id实际上很有用:

redirect_to message_path

为什么以及如何使用这个?

因为这可以从实际接收到:id param的动作开始,所以我认为控制器将它保留在内存中并默认情况下将其传递给它,但我想知道这种行为来自何处?

我在rails文档中找不到任何内容.

这是本教程的github存储库,因此上面一行的具体位置是here in this controller.

我确认这是有效的.

还有一个与前一个Message资源嵌套的Comment资源.
正如您可以看到in that controller on the update action,在更新注释(嵌套在消息中)之后,控制器重定向到message_path但在这种情况下:id参数通过实例变量@message存在(我知道这是有效的,因为对象消息响应.id方法,否则应该是@ message.id)

我认为为什么这里仍然传递id的原因是因为我们在Comments控制器中并且:另一个资源的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存在于当前请求参数中并且它用于此路由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读