Rails路由带有动态slug,后跟子ID

时间:2013-10-23 21:56:18

标签: ruby-on-rails routes

在我的模型中,卖家有很多物品。

卖方可以通过其slug访问,而不是ID:

配置/ routes.rb中

get "/:slug", to: "sellers#show"

这很好用。

但是,我希望每个项目网址都根据格式/:slug/:id包含其子标题,例如/piano_man/5/joe_schmoe/344

以下作品:

配置/ routes.rb中

get '/:slug/:id', to: 'items#show'

应用/控制器/ items_controller.rb

def show
  @item = Item.find(params[:id])
end

但它(显然)并没有改变默认的Item URL行为,因为这段代码只是忽略了:slug部分。

如何将默认网址<%= link_to item %>指向/:slug/:id而不是/items/:id

请记住,“slug”来自父模型Seller,但ID来自Item本身。

1 个答案:

答案 0 :(得分:1)

我认为您需要命名自定义卖家的物品路线,然后在使用link_to时引用该命名路线:

<强>配置/ routes.rb中

get '/:slug/:id', to: 'items#show', as: 'seller_item'

应用/视图/项目/ index.html.haml

= link_to item.name, seller_item_path(slug: item.slug, id: item.id)

据我所知,这应该有效......可能还有一种方法可以覆盖Item模型上的to_param以返回slug和id,而不必直接将它们指定为{{{ 1}}。