鉴于一个复杂的网址,我想给用户一个缩短的网址。 例如, 如果用户给我url1,我将向用户返回一个名为www.something.com/some-name的网址。
如果用户给我url2,我会向用户返回一个名为www.something.com/some-other-name的网址。 (我会将提供的网址及其匹配的网址存储在数据库中)
我计划收到缩短的内容并在数据库中找到相应的网址,并将用户重定向到原始网址。 但是我应该如何将www.something.com/some-name路由到Ruby on Rails中的正确控制器?如何动态添加这些路由?
答案 0 :(得分:1)
这很容易,首先创建一个模型,例如名为short_url
,有两个
字段,例如original_url
和short_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失败。