【问题标题】:Dynamic Routing not rendering动态路由不渲染
【发布时间】:2013-03-27 13:00:39
【问题描述】:

所以,我有一个命名路线:

match 'ip/get/:ip' => 'ip_addresses#show', :via => :get

如您所见,我希望 ip(在“get”之后)是动态的,但是当我尝试它时,我不断收到路由错误。这是我的路线:

  root        /                     ip_addresses#index
ip_add POST   /ip/add(.:format)     ip_addresses#create
       GET    /ip/add(.:format)     ip_addresses#new
ip_all GET    /ip/all(.:format)     ip_addresses#index
       GET    /ip/get/:ip(.:format) ip_addresses#show
       DELETE /ip/all(.:format)     ip_addresses#destroy

这是我的show 操作:

def show
  IpAddress.find(params[:id])
end

编辑:路由错误:

ActionController::RoutingError (No route matches [GET] "/ip/get/1.2.3.4"):

我已经阅读了 Rails Routing from the Outside In Guide (http://guides.rubyonrails.org/routing.html) 但我自然可能忽略了一些东西。任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 你能解释一下你想完成什么吗?查看代码和路线,我怀疑这是解决此问题的好方法。虽然这不是您回答的直接答案,但我可以建议更简洁的代码来做同样的事情。
  • 你能分享你收到的错误吗?
  • Aleks,我同意这可能会更简洁,但我基本上完成了一个编码练习,请求命名为 RESTful 的路由,在 #show 的情况下为动态的。如果您对提供的代码有任何建议,请随时添加!
  • 哦,好吧,如果是编码练习,那没关系;)这对练习很有好处:)

标签: ruby-on-rails ruby routing


【解决方案1】:

你的问题的答案就在你给出的文章中。

看看部分:

默认情况下,动态段不接受点 - 这是因为 dot 用作格式化路线的分隔符。如果您需要使用 动态段中的点添加一个覆盖它的约束 - 例如 :id => /[^/]+/ 允许除斜线以外的任何内容。

看看那里的例子:

match ':controller(/:action(/:id))', :controller => /admin\/[^\/]+/

所以在你的例子中,我相信它会是:

match 'ip/get/:ip' => 'ip_addresses#show', :id => /[^/]+/ , :via => :get

并将params[:id] 更改为params[:ip]

【讨论】:

  • Oooooooooh,我之前读过那部分,现在读了,我在想“但我没有点,除非你把冒号算作点”,然后我发现 IP 地址有点。哦。让我试试你的建议!
  • 澄清一下,我的路由操作应该如下所示:match 'ip/get/:ip => /[^/]+/'=> 'ip_addresses#show', :via => :get?有时 Rails 指南对我来说有点简洁。
  • 您在网页上也有一个示例 match 'photos/:id' => 'photos#show', :id => /[A-Z]\d{5}/ ,所以在您的情况下,我相信它会是 match 'ip/get/:ip' => 'ip_addresses#show', :id => /[^/]+/ , :via => :get
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 2021-09-30
  • 1970-01-01
  • 2014-12-14
  • 2021-01-11
  • 2019-11-26
  • 2020-02-13
  • 2022-12-03
相关资源
最近更新 更多