在我的模型中,卖家有很多物品。
卖方可以通过其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本身。
答案 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}}。