【发布时间】:2013-09-04 20:57:08
【问题描述】:
我想访问我为特定路由定义的默认值。但是 Rails 拒绝将其放入 params 哈希中。示例:
routes.rb:
get "packages(/:display)", to: "packages#index", defaults: { display: 'grid' }
我调用的网址:
http://localhost:3000/packages
params 哈希变为:
{"action"=>"index", "controller"=>"packages"}
但我更希望得到:
{"action"=>"index", "controller"=>"packages", "display"=>"grid"}
问题真的不大。但是 Rails 声称 DRY 如此,所以我认为我可以在 routes.rb 中保留默认值,而不是在我的控制器或查看代码中重复它们。
我的意图是显示结果网格或结果列表。如果用户没有指定某个视图,我想使用网格样式。
(我使用的是 Rails 4。)
【问题讨论】:
-
你有
/packages匹配的更早的路由吗? -
天哪。你猜对了。得到“包”=>“包#index”。我将其注释掉,现在默认参数按预期传递。非常感谢您查看您的水晶球。 :)
-
虽然我现在调用 /packages/list 时会得到一个非常奇怪的效果。我假设 params 与 request.params 相同。但是 params 是 {"display"=>"grid", "controller"=>"packages", "action"=>"index"} 而 request.params 是{"display"=>"list", "controller"=>"packages", "action"=>"index"}。很奇怪。
标签: ruby-on-rails parameters routes defaults