我有两个模特团队和竞选。
团队has_many:广告系列和广告系列所属:至:团队
我的团队按预期方式工作,即https://localhost/t/myteam
但是,对于campaign_path(@ campaign.team,@campaign),我的网址显示为http://localhost/t/1/campaign/1预计会这样,http://localhost/t/myteam/campaign/1
我该如何实现?我在做什么错?
[当您将对象作为参数传递时,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
这适用于嵌套和非嵌套路由。您可能要添加路线,因为那里可能有些奇怪。
该路线是资源路线吗?。如果是,则需要将param键设置为Slug。像这样:
resources :campaigns, param: :slug