Ruby on rails 将旧id路由到具有相同控制器名称并使用友好id的新路由

Ruby on rails 将旧id路由到具有相同控制器名称并使用友好id的新路由,ruby-on-rails,routing,routes,custom-routes,reroute,Ruby On Rails,Routing,Routes,Custom Routes,Reroute,我有一个rails应用程序,但我需要将旧的路由从php应用程序路由到我的新rails路由(因为旧的谷歌广告绑定到它们)。我看得太远了,想不出如何解决我的问题 我有一个视频控制器,我的新视频使用“友好id”。现在,我有一条老路线,它们使用slug和id。我需要将这些旧路线重定向到我的新路线。我知道我需要检查的是视频是否为零,但我正试图弄清楚如何定义slug去哪里 我的问题:我正在尝试执行简单的重新路由操作,但我的控制器正在尝试定位id,但无法找到它们(因为slug不再有效),并且抛出了一个错误。我

我有一个rails应用程序,但我需要将旧的路由从php应用程序路由到我的新rails路由(因为旧的谷歌广告绑定到它们)。我看得太远了,想不出如何解决我的问题

我有一个视频控制器,我的新视频使用“友好id”。现在,我有一条老路线,它们使用slug和id。我需要将这些旧路线重定向到我的新路线。我知道我需要检查的是视频是否为零,但我正试图弄清楚如何定义slug去哪里

我的问题:我正在尝试执行简单的重新路由操作,但我的控制器正在尝试定位id,但无法找到它们(因为slug不再有效),并且抛出了一个错误。我有一个6个视频的列表,我需要重新路由到我的新路线

对我遗漏的东西有什么建议吗

路线

get '/videos/toys' => redirect('/videos')
get '/videos/88' => redirect('/videos/cool-video')
get '/videos/1388' => redirect('/videos/better-video')
get '/videos/tech-video' => redirect('/videos/technologies-video')
例如,我有一个技术视频,old slug,需要转到新的“技术视频”,或者我有一个id'88'需要转到“酷视频”

控制器

(bottom of controller)
private

def set_video
  @video = Video.friendly.find(params[:id])
  if @video.nil?
    **method goes here**

  end
end

正如我们在聊天中发现的那样,请确保没有包含
'videos'

(包括
资源:视频

发生在重定向上方的路由文件中,因为包含
/videos/:id
的路由将在重定向生效之前匹配


祝你好运

正如我们在聊天中发现的,请确保没有包含
'videos'

(包括
资源:视频

发生在重定向上方的路由文件中,因为包含
/videos/:id
的路由将在重定向生效之前匹配


祝你好运

我以前没有使用过
friendly\u id
,但我认为您可能只需要在现有路线下方添加一条路线,看起来像
get'/videos/:id'=>“controller#action”
,其中
controller
可能是
videos
并且
action
是您的控制器操作(可能是
show
)我讨厌扮演“愚蠢的金发女郎”的角色,但我不能完全按照你的建议去做,因为我不能完全理解它。根据我上面定义的路由,您建议路由上的路由类型是什么?当rails查找要匹配的路由时,它将看到您拥有的路由
/videos/88
/videos/1388
,等等,并根据您的请求为您重定向它们,但由于您没有为
/videos/cool video
定义路由,而
/videos/better video
,它不知道该怎么办。因此,如果您将
/videos/:id
路由添加到您拥有的路由下面,Rails将看到该路由并与之匹配,并且将假定
酷视频
更好的视频
用于
:id
字段,并将它们作为参数[:id]在控制器中可用新的路径将是
get'/videos/:id'=>“videos”#show'
(如果您希望用户被发送到
videoscocontroller
中的
show
操作。您可能还需要更改
/videos/toys
路径的右侧,因为它没有任何用于
参数[:id]
问题,左边的ID是旧的“ID”并且不与任何视频绑定。右侧的id是当前路线。我如何将旧路线与新路线“更改/转换/匹配”。友好id只是将id设置为字符串而不是数字。右侧的id是活动的段塞。我之所以问这个问题,是因为我在执行您建议的统一路线时遇到错误。我没有回答“以前没有使用过
友好的\u id
,但是我想你可能只需要在你拥有的路径下面添加一条路径,看起来像
get'/videos/:id'=>“controller#action”
,其中
controller
可能是
videos
action
是你的控制器动作(可能是
show
)我讨厌扮演“愚蠢的金发女郎”sterotype,但我不能完全按照你的建议去做,因为我无法理解它。根据我上面定义的路线,你会建议路线上的路线是什么类型?当rails查找要匹配的路线时,它会看到你拥有的路线
/videos/88
/videos/1388
,等等,并根据你的需要为你重定向它们equested,但由于您没有为
/videos/cool video
/videos/better video
定义路由,它不知道该做什么。因此,如果您将
/videos/:id
路由添加到您拥有的路由下面,Rails将看到该路由并与之匹配,并且将假定
cool video
better videos
是r单击
:id
字段,并将它们作为参数[:id]在控制器中可用。新路径将是
获取“/videos/:id”=>”视频#显示“
(如果您希望将用户发送到
VideosController
中的
show
操作。您可能需要更改
/videos/toys
路线的右侧,因为它没有任何东西可用于
参数[:id]
问题,左侧的id是旧的“id”并且不与任何视频绑定。右侧的id是当前路线。我如何将旧路线与新路线“更改/转换/匹配”。友好id只是将id设置为字符串而不是数字。右侧的id是活动的段塞。我之所以询问,是因为我在执行您建议的统一路线时遇到错误。谢谢你就像我的第二个救世主。谢谢你!你就像我的第二个救世主。