我按照教程(来自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#newedit_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@H_404_15@据我所知,到达这个控制器的show动作的路径就像/ messages / 17,我的意思是我们必须把我们想要查看的特定消息的ID:.
因此,如果我需要在修改后将用户重定向到此消息视图(在#update *** 作中),我应该使用:
redirect_to message_path(17)@H_404_15@但事实证明,省略这个:ID实际上很有用:
redirect_to message_path@H_404_15@为什么以及如何使用这个?
因为这可以从实际接收到:ID param的动作开始,所以我认为控制器将它保留在内存中并默认情况下将其传递给它,但我想知道这种行为来自何处?
我在rails文档中找不到任何内容.
这是本教程的github存储库,因此上面一行的具体位置是here in this controller.
我确认这是有效的.
还有一个与前一个Message资源嵌套的Comment资源.
正如您可以看到in that controller on theupdate
action,在更新注释(嵌套在消息中)之后,控制器重定向到message_path但在这种情况下:ID参数通过实例变量@message存在(我知道这是有效的,因为对象消息响应.ID方法,否则应该是@ message.ID)我认为为什么这里仍然传递ID的原因是因为我们在Comments控制器中并且:另一个资源的ID无法在引擎盖下传递,因此为什么它被明确地写出来.
我没有另外的解释..
任何人都可以解释为什么这有效吗?
@R_403_6120@ 我在 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存在于当前请求参数中并且它用于此路由.
总结以上是内存溢出为你收集整理的ruby-on-rails – 为什么重定向到#show动作而不传递:id param work(在rails中)?全部内容,希望文章能够帮你解决ruby-on-rails – 为什么重定向到#show动作而不传递:id param work(在rails中)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)