【问题标题】:Rails route helpers - one model to fill many paramsRails 路由助手 - 一个模型来填充许多参数
【发布时间】:2011-06-11 16:39:01
【问题描述】:

我有以下路线:

get "/:user_name/things/:thing_name" => "things#show", :as => "show_user_thing"

Thing 属于 user。所以只有thing 的一个实例我有两个参数。但是,当使用路由助手时,我不得不像这样单独指定每个段:

show_user_thing_path(@thing.user, @thing)

这很糟糕。我宁愿这样做:

show_user_thing_path(@thing)

但是我如何使用“路线辅助方式”来做到这一点?我很想仍然将所有的铁路好东西用于这样的路线。有什么想法吗?

【问题讨论】:

  • 我很好奇为什么你在路由中需要用户名,因为无论如何你都是从事物中拉出用户。为什么不/things/:thing_name
  • @natedavisolds 因为我使用的 slug 可能会相互碰撞,除非在用户的命名空间中。换句话说,许多用户可以拥有同名的东西。
  • 很公平。我将在下面的答案中试一试

标签: ruby-on-rails ruby-on-rails-3 routing helpers


【解决方案1】:

我感觉到你的痛苦。在我经常使用 url helper 的情况下,我只是编写自己的 helper。

def show_thing_by_user_path(thing)
    show_user_thing_path(thing.user, thing)
end 

当然,您必须稍微修改它以包含任何选项和格式,但我想您明白我在说什么。

【讨论】:

  • 是否有一个标准的地方可以放置这些特定于路线的助手?
  • 我不知道。助手非常杂乱无章。我是 Rails 团队将如何处理它,类似于资产管理。嗯..也许这是一个很好的讨论/贡献主题。
  • 尽管如此,我认为 helper 目录中的 routes_helper.rb 文件是一个不错的选择。
  • 从 Rails 3.1 开始,助手似乎是唯一的方法。这是我会考虑修补的东西。
  • @TheDeeno,如果您发现任何更多信息,或者更好/更惯用的处理方式,请更新我们!我现在也在为同样的事情而苦苦挣扎。虽然thing_path(@user, @thing)thing_path(@thing.user, @thing) 是可行的,但它不是很漂亮。此外,您是否使用嵌套资源:resources :users do resources :things end 或通过命名参数的路由前缀:scope ":username: do resources :things end
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多