更新params或重定向到正确的URL轨道



对rails来说相对较新,因此很难找到解决此问题的方法。

当前有一条路由:/test/testing/:id一旦用户点击路线,它将在数据库中找到具有该特定id的项目,并将URL设置为localhost:3000/test/testing/1-name-of-this-item

但是,如果您只是手动键入该URL,例如:localhost:3000/test/testing/1,我希望它重定向到/test/testing/1-name-of-this-item,或者如果有某种方法可以在页面加载之前更改参数。但不完全确定如何做到这一点。

谢谢你的帮助!

您可以尝试两种方法来处理此

1:使用以下Gem,它将根据您想要的属性构建URLhttps://github.com/norman/friendly_id

2:覆盖模型中的to_param方法,并传递要在URL路径中显示的属性

https://apidock.com/rails/ActiveRecord/Base/to_param

根据您上面的评论,我假设您有一个Testing模型,它至少有一个名为id的列和一个列path。因为您没有提到路径是如何生成的,所以我只假设列是预填充的,并返回像1-name-of-this-item这样的slug,并且路径前缀的数字始终与记录的id同步。

此外,我猜您已经正确设置了路由,并且/test是一个命名空间,/testing被定义为普通的resources :testing。这让我假设像test_testing_path这样的path_helper是由Rails生成的。

如果是这样的话,那么只需将show控制器方法更改为以下方法就足够了:

def show
@testing = Testing.find(params[:id])

if @testing.path != params[:id]
redirect_to test_testing_path(@testing.path)
else
respond_to do |format|
format.html # show.html.erb
format.json { render json: @testing }
end
end
end

我想通了;有一个名为refraction的gem,它是一个中间件,允许您在应用程序处理URL之前更改URL,效果很好。

https://github.com/joshsusser/refraction

最新更新