如何在Ruby On Rails中动态添加URL?

时间:2015-05-12 05:10:04

标签: ruby-on-rails ruby url web

鉴于一个复杂的网址,我想给用户一个缩短的网址。 例如, 如果用户给我url1,我将向用户返回一个名为www.something.com/some-name的网址。

如果用户给我url2,我会向用户返回一个名为www.something.com/some-other-name的网址。 (我会将提供的网址及其匹配的网址存储在数据库中)

我计划收到缩短的内容并在数据库中找到相应的网址,并将用户重定向到原始网址。 但是我应该如何将www.something.com/some-name路由到Ruby on Rails中的正确控制器?如何动态添加这些路由?

1 个答案:

答案 0 :(得分:1)

这很容易,首先创建一个模型,例如名为short_url,有两个 字段,例如original_urlshort_urls_controller

然后创建控制器,例如将其命名为get /:short_url, to: 'short_urls#go' 并将其添加到 路线,但如果你把路线放在最开始的地方,那就很好了 通用,它将匹配所有路线,您的应用程序将无法正常运行, 也就是说,如果应用程序有其他路线,而不仅仅是为此目的。

get /u/:short_url, to: 'short_urls#go'

或者如果你想确保它与其他人玩得很好,那么只需添加一个小的 前缀

def ShortUrlsController < ApplicationController
  skip_before_action :authenticate_user!

  def go
    url = ShortUrl.find_by(short_url: params[:short_url])
    redirect_to url.original_url
  end

end

然后控制器,如果你有设计或任何认证,请确保你 在这里跳过那个身份验证,你不希望别人打你的短网址 获取请登录提醒

find_by

您还应该处理错误的网址,因为如果网址不存在,{{1}}将会失败,因此添加内容以优雅地使用404失败。