【问题标题】:How to change route name in Ruby on Rails如何在 Ruby on Rails 中更改路由名称
【发布时间】:2015-12-20 23:33:27
【问题描述】:

我正在从事一个 RoR 项目,我有一些路线想要更改这些路线在浏览器上的显示方式。

我的路线:

get 'campaigns/:slug' => 'campaigns#show'

结果:

http://localhost:3000/campaigns/cdlcuiaba

我想要什么:

http://localhost:3000/cdlcuiaba

谢谢

【问题讨论】:

  • 我认为你不能这样做,因为当点击像 /campaigns 这样的 URL 时,你将被重定向到 params[:slug] 等于 "campaigns" 的 CampaignsController#show 操作

标签: ruby-on-rails ruby url routes rails-routing


【解决方案1】:

请注意,这是非常不推荐的,但可以按照以下方式进行(订购事项):

get '/admin' => 'admin:show'
get '/:slug' => 'campaigns#show'

编辑在您的 cmets 中,您提到您希望 /admin campaigns#show 对待,所以我编辑了答案以重现这种行为。我必须说这是强烈不推荐 - 阅读 cmets 应该清楚原因。

【讨论】:

  • 但是我还有其他路由,例如:localhost:3000/admin,所以当我访问这些路由中的任何一个时,我将被重定向到活动控制器
  • @Henrique 是的,这是意料之中的。 Rails(或任何其他软件)如何知道 admin 是对象 id 还是具有某些特殊含义(例如,是另一个资源的名称)?将根/ 视为另一条路径。如果我们使用另一条路径而不是/,请考虑您的问题是否有意义,例如mypath/:一旦我们将mypath/:id 定义为某个资源的show,我们希望mypath/something 返回show something 资源。
  • @Henrique 我已经更新了我的答案以重现您要求的行为。
  • @brito 你说得很好——这不是 rails(tm) 的方式,因为让路线尽可能直观是一种很好的做法。但是,rails 会知道区分 - routes 从上到下被读取和匹配(正如您在答案中突出显示的那样)。
  • @brito 非常感谢您的解释,我知道这不是好方法,所以我退出了这个任务,也许将来这个任务会给我的应用程序带来许多其他问题。谢谢。
猜你喜欢
  • 2014-06-14
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多