对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