获取routes.rb中资源的映射路径

时间:2016-09-08 12:59:51

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

TL; DR;

有没有办法获取资源映射的字符串,就像在routes.rb中声明一样,包括params名称?例如:

/resource/:id/nested/:nested_id/deep/:deep_id
/resource/:id/nested/:nested_id
/resource/:id

我需要这个字符串,并打算手动替换params,可能使用像{id: 1, nested_id:2, deep_id: 3}

这样的地图

原因

我有一个集成,我会收到类似的东西:

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

resource:nested_resource, resource_id:1, extra_args: {id: 1}

resource:first_level_resource, resource_id:1, extra_args: {}

我打算替换url中的值并重定向到给定的资源。也许使用从extra_args映射到url中匹配参数的自动填充。

我不想做很多if / else来致电deep_resource_path(a,b,c)nested_resource_path(a,b)first_level_resource_path(a)

请注意,对于深层资源,我需要2个args(祖父表id和父ID)。对于嵌套资源,我只需要父ID,对于first_level资源,我只需要它自己的Id。

那么,有可能吗?

谢谢。

ps。:我认为带有args的地图是一个更好的选择,然后接收或硬编码de full url来重定向每个资源。因此,如果网址在将来发生变化,但保留相同的参数,则重定向可以继续工作。

1 个答案:

答案 0 :(得分:2)

如果您拉入路线url helpers:

include Rails.application.routes.url_helpers

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

user GET    /users/:id(.:format)     users#show

您可以使用user_path(a_user)user_url(a_user)助手:

[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)>