Ruby on rails 获取资源在routes.rb中的映射路径

Ruby on rails 获取资源在routes.rb中的映射路径,ruby-on-rails,ruby,routing,url-routing,Ruby On Rails,Ruby,Routing,Url Routing,TL;博士 有并没有一种方法可以像routes.rb中声明的那个样使用资源映射来获取字符串,包括参数名?例如: /resource/:id/nested/:nested_id/deep/:deep_id /resource/:id/nested/:nested_id /resource/:id 我需要这个字符串,并打算手动替换参数,可能是使用像{id:1,nested_id:2,deep_id:3} 原因 我有一个集成,在那里我将收到如下信息: resource:deep_resource,

TL;博士

有并没有一种方法可以像routes.rb中声明的那个样使用资源映射来获取字符串,包括参数名?例如:

/resource/:id/nested/:nested_id/deep/:deep_id
/resource/:id/nested/:nested_id
/resource/:id
我需要这个字符串,并打算手动替换参数,可能是使用像
{id:1,nested_id:2,deep_id:3}

原因

我有一个集成,在那里我将收到如下信息:

resource:deep_resource, resource_id:1, extra_args: {id: 1, nested_id:2}

我打算替换url中的值并重定向到给定的资源。可能需要从额外的参数映射到url中匹配的参数进行自动填充

我不想做很多if/else来调用
deep\u resource\u path(a,b,c)
nested\u resource\u path(a,b)
第一级\u resource\u path(a)

请注意,对于deep资源,我还需要2个参数(祖父母id和父母id)。对于嵌套资源,我只需要父id,对于第一级资源,我只需要它自己的id

那么,有可能吗

多谢各位


注:我认为带有args的映射是更好的选择,然后接收或硬编码反完整url以重定向每个资源。因此,如果url将来更改,但保持相同的参数,则重定向将继续工作。

如果您拉入路由url帮助程序:

include Rails.application.routes.url_helpers
然后可以直接访问路径和url帮助程序以获取此字符串。例如,在运行
rake routes
时给出以下输出:

user GET    /users/:id(.:format)     users#show
您可以使用
user\u路径(a\u用户)
user\u url(a\u用户)
帮助程序:

[8] pry(main)> user_path(user_with_id_7)
=> "/users/7"
[9] pry(main)> user_url(user_with_id_7)
=> "http://localhost:3000/users/7"
[10] pry(main)>

如果您拉入路由url帮助程序:

include Rails.application.routes.url_helpers
然后可以直接访问路径和url帮助程序以获取此字符串。例如,在运行
rake routes
时给出以下输出:

user GET    /users/:id(.:format)     users#show
您可以使用
user\u路径(a\u用户)
user\u url(a\u用户)
帮助程序:

[8] pry(main)> user_path(user_with_id_7)
=> "/users/7"
[9] pry(main)> user_url(user_with_id_7)
=> "http://localhost:3000/users/7"
[10] pry(main)>

这仅适用于“新”URL。当试图获取资源路径(show)的url时,它要求我传递一个id。但是我想访问像/condominios/:id这样的东西,用映射插入参数并调用de-url。如果是资源路径或资源路径,我不需要新建。可能吗?我想我不明白为什么不使用show path版本,在我的示例中,show path是
user\u path
并传入user对象。插值不是在重塑Rails框架的轮子吗?我将编辑我的答案,以显示
show
案例。这会起作用,但一旦我有了一个表格,其中包含了一些资源,例如用户、帖子和评论,我想做的就是这样做:“此行代表什么资源?评论?好的,给我一个注释的显示url,并用这些参数插入。然后,重定向“。若要按照您建议的方式工作,我需要执行if/else以使用user\u url、post\u url或comments\u url。在我的情况下,我也有嵌套的资源。但我会做一些测试……这只适用于“new”url。当尝试获取资源路径的url时(显示),它要求我传递一个id。但是我想访问像/condominios/:id这样的东西,用map插入参数并调用de-url。如果是resource\u a\u path或resource\u b\u path,我不需要新建。可能吗?我想我不明白为什么不使用show-path版本,在我的示例中是
user\u path
并传入用户对象。插值不是重新发明了Rails框架的轮子吗?我将编辑我的答案以显示
show
案例。它会起作用,但一旦我有了一个表,它会指向多个资源,例如用户、帖子和评论,我想做的就是这样做:这一行代表什么资源?评论?好的,给我一个注释的显示url,并用这些参数插入。然后,重定向“。要按照您建议的方式工作,我需要执行if/else来使用user\u url、post\u url或comments\u url。在我的情况下,我也有嵌套的资源。但我会做一些测试。。。。