((Friendly_id)如何在嵌套路由中使用slug而不是id?

问题描述 投票:0回答:2

我有两个模特团队和竞选。

团队has_many:广告系列和广告系列所属:至:团队

我的团队按预期方式工作,即https://localhost/t/myteam

但是,对于campaign_path(@ campaign.team,@campaign),我的网址显示为http://localhost/t/1/campaign/1预计会这样,http://localhost/t/myteam/campaign/1

我该如何实现?我在做什么错?

ruby ruby-on-rails-5 friendly-id
2个回答
0
投票

[当您将对象作为参数传递时,Rails会调用方法to_param,默认情况下,ActiveRecord会返回id(作为字符串)。您可以在团队模型中覆盖to_param作为团队名称(或其他属性):

delegate :to_param, to: name

您可能还想修改路由,因此该属性称为team_name而不是team_id(因为它令人困惑)。我不确定您的路线如何,但是您应该使用param属性。例如:

resources :teams, param: :name

请注意,在控制器中,您将需要:team = Team.find_by(name:params [:name])

或者,您也可以使用friendly_id gem:https://github.com/norman/friendly_id

这适用于嵌套和非嵌套路由。您可能要添加路线,因为那里可能有些奇怪。


0
投票

该路线是资源路线吗?。如果是,则需要将param键设置为Slug。像这样:

resources :campaigns, param: :slug
© www.soinside.com 2019 - 2024. All rights reserved.