2015-11-22 113 views
0

這就是我的Link模型的樣子。控制器縮短鏈接的操作

id: 6, 
long_url: "http://google.com", 
short_url: "91befc", 
created_at: Sun, 22 Nov 2015 11:53:01 UTC +00:00, 
updated_at: Sun, 22 Nov 2015 11:53:01 UTC +00:00> 

short_url正在使用的SecureRandom產生,以努力以創建bit.ly狀過程。

當有人複製並粘貼http://bitlyclone.com/3jdjh(這是他們「縮短」鏈接時顯示的內容)時,我希望它在數據庫中查找long_url並重定向到它。

回答

1

你可以去了解它是這樣的:

# app/controllers/links_controller.rb 
def show 
    link = Link.find_by!(short_url: params[:slug]) 

    redirect_to link.long_url 
end 

這假定您確保long_url有效增加時。另外,如果輸入的short_url不存在,則使用find_by!可確保呈現404。然後

# config/routes.rb 
get '/:slug', to: 'links#show' 

你的路線會乾脆直接到該控制器的動作,並通過它short_url作爲參數。

然而,一句警告。這條路線將匹配很多東西,並且由於路線從上到下匹配(在您的routes.rb文件中),請確保它不會優先於應用程序中的其他路線。

+2

這可能會起作用,但在有更多路由定義時要小心路由問題。例如'/ admin'也會匹配這條路線。這個slug路線可能應該在路線文件的底部定義。 – zwippie

+0

這是一個很好的觀點@zwippie。我不完全確定,但它也可能匹配根路徑。 – Drenmi