【问题标题】:Get the mapped path for a resource as it is in routes.rb获取资源的映射路径,因为它在 routes.rb 中
【发布时间】:2016-09-08 12:59:51
【问题描述】:

TL;DR;

有没有办法获得一个包含资源映射的字符串,就像在 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}

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 个参数(祖父母 ID 和父母 ID)。对于嵌套资源,我只需要父 ID,对于 first_level 资源,我只需要它自己的 ID。

那么,有可能吗?

谢谢。

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

【问题讨论】:

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


    【解决方案1】:

    如果你拉入路由 url 助手:

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

    【讨论】:

    • 这仅适用于“新”网址。当试图获取 resource_path (show) 的 url 时,它要求我传递一个 id。但我想访问 /condominios/:id 之类的东西,用地图插入参数并调用 de url。如果是resource_a_path 或resource_b_path,我不需要new。有可能吗?
    • 我想我不明白你为什么不只使用显示路径版本,在我的例子中是user_path 并传入用户对象。插值不是重新发明 Rails 框架的轮子吗?我将编辑我的答案以显示 show 案例。
    • 它会起作用,但是一旦我有一个指向多个资源的表,例如用户、帖子和 cmets,我想到的是做这样的事情:“这行代表什么资源?评论?对,给我评论的显示网址并插入这些参数。然后,重定向“。要按照您建议的方式工作,我需要执行 if/else 以使用 user_url、post_url 或 cmets_url。就我而言,我也有嵌套资源。但我会做一些测试......
    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 2015-01-19
    • 2011-09-12
    • 2021-04-24
    • 2020-10-21
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多