0

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

卖家可以通过它的 slug 访问,而不是它的 ID:

配置/路由.rb

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

这工作正常。

但是,我希望每个项目 URL 根据格式包含其父 slug /:slug/:id,例如/piano_man/5/joe_schmoe/344

以下作品:

配置/路由.rb

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

应用程序/控制器/items_controller.rb

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

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

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

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

4

1 回答 1

1

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

配置/路由.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)

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

于 2013-10-23T22:52:31.143 回答