Ruby on rails 为嵌套管线创建相对ID
我试图为Rails中的嵌套路由创建第二个id列 我有一条类似这样的路线:Ruby on rails 为嵌套管线创建相对ID,ruby-on-rails,nested-routes,Ruby On Rails,Nested Routes,我试图为Rails中的嵌套路由创建第二个id列 我有一条类似这样的路线:/projects/:project\u id/bugs/:bug\u id 项目具有多个:bug关系,bug属于:project。现在,路由中显示的bug_id是在将模型保存到数据库时生成的标准增量id 然而,我更希望它是相对的项目 换句话说,我想在bug模型上创建一个名为relative\u id的列,它从每个项目中的1开始,并自动递增 例如: /projects/1/bugs/1 #should take me to
/projects/:project\u id/bugs/:bug\u id
项目具有多个:bug
关系,bug属于:project
。现在,路由中显示的bug_id
是在将模型保存到数据库时生成的标准增量id
然而,我更希望它是相对的项目
换句话说,我想在bug模型上创建一个名为relative\u id
的列,它从每个项目中的1开始,并自动递增
例如:
/projects/1/bugs/1 #should take me to the first bug of project one
/projects/2/bugs/1 #should take me to the first bug of project two
我的问题是,我是否必须手动维护这个相对id
列,或者是否有一些Rails的“魔力”可以让我更容易地使用
routes.rb:
resources :projects do
get 'bugs/feed' => 'bugs#feed'
get 'bugs/groups' => 'bugs#groups'
resources :bugs
resources :permissions, :only => ['create']
end
我建议你不要这样做,因为这只会让你的生活更加困难。例如,您不必执行
Bug.find(2)
,而必须执行Bug.where(项目id:5,相对id:2)
或project.find(5).bugs.where(相对id:2)
。这可能看起来没什么大不了的,但它会比你意识到的更经常地妨碍你
如果您对bug
使用常规的“全局”自动增量id,您仍然可以使用类似/projects/5/bugs/2
的漂亮URL(如果只有能够访问project X的人才能访问它的bug,您可能无论如何都要这样做)。一个新项目的bug ID总是从1开始,这对用户很重要吗
如果你决定你真的需要这么做,我很确定你需要自己去实现它。可能在数据库级别(而不是在Rails中)执行此操作会更好,只是出于一致性的原因。您需要这样做,以获得以前的MAX(relative\u id)
并创建新记录,同时不能创建其他记录(否则将导致relative\u id
冲突)。这里有一个相关的问题可能会帮助您:
我知道这并不是你想要的答案,但我希望这会有所帮助。你尝试过什么?您的
routes.rb
中的实际代码是什么样子的?我还没有尝试手动实现相对id,因为我希望Rails会有一个功能,我可以利用它来处理自动递增。如果没有,我想我能够做到,但我想在继续之前确保我没有遗漏一些明显的东西。我将使用相对id几乎完全用于演示目的,标准id仍然存在,所以这不应该是一个问题。非常感谢你!这就是我要找的信息。我只是想确定我没有忽略任何可以简化流程的东西。