【问题标题】:Rails: Accessing route segment defaultsRails:访问路段默认值
【发布时间】: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 时会得到一个非常奇怪的效果。我假设 paramsrequest.params 相同。但是 params 是 {"display"=>"grid", "controller"=>"packages", "action"=>"index"} 而 request.params 是{"display"=>"list", "controller"=>"packages", "action"=>"index"}。很奇怪。

标签: ruby-on-rails parameters routes defaults


【解决方案1】:

我刚刚在我的 Rails 4 应用程序中测试了以下路线。

get "packages(/:display)", to: "packages#index", defaults: { display: "grid" }
  • /packages: params[:display]"grid"
  • /packages/list: params[:display]"list"

您可能还有其他路线参与其中,从而阻止了我在上面列出的相同结果。

找不到这样的冲突,不如我们避开可选段(结果同上)

get "packages",          to: "packages#index", display: "grid"
get "packages/:display", to: "packages#index"

【讨论】:

  • 谢谢。确实让我思考。当我宁愿使用多条路由使其更明确时,似乎我在 URL 段上投入了太多精力。我会试试这个。但是我仍然很困惑为什么 paramsrequest.params 给了我不同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多