【发布时间】:2015-12-10 04:11:22
【问题描述】:
我有一个 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')
例如,我有一个技术视频,旧 slug,需要转到新的“技术视频”,或者我有一个 '88' 的 ID 需要转到“酷视频”
控制器
(bottom of controller)
private
def set_video
@video = Video.friendly.find(params[:id])
if @video.nil?
**method goes here**
end
end
【问题讨论】:
-
我之前没有使用过
friendly_id,但认为您可能只需要在您拥有的路线下方添加一条路线,看起来像get '/videos/:id' => 'controller#action',其中controller可能是videos和@ 987654327@ 是您的控制器操作(可能是show) -
我讨厌扮演“愚蠢的金发女郎”的刻板印象,但我无法完全遵循您的建议,因为我无法理解它。根据我上面定义的路线,您会建议路线上的哪种类型的路线?
-
当 rails 查找要匹配的路由时,它会看到您拥有的路由
/videos/88、/videos/1388等,并根据您的要求为您重定向它们,但由于您没有为/videos/cool-video和/videos/better-video定义了一个路由,它不知道该怎么做。因此,如果您将/videos/:id路由添加到您拥有的路由下方,Rails 将看到该路由并匹配它,并假设cool-video和better-video用于:id字段,并使它们在您的控制器中可用作为参数[:id] -
新路由将是
get '/videos/:id' => 'videos#show'(如果您希望将用户发送到您的VideosController中的show操作。您可能需要更改@ 的右侧987654340@ 路由也因为它没有任何可用于params[:id] -
问题,左侧的 id 是旧的“id”,与任何视频无关。右侧的 ID 是当前路线。我如何“更改/转换/匹配”旧的和新的。友好的 id 只是在字符串而不是数字中生成 id。右边的 id 是活跃的 slug。我只是问,因为当我按照您建议的路线执行统一路线时遇到错误。
标签: ruby-on-rails routing routes custom-routes reroute