Ruby on rails 如何在RubyonRails中动态添加URL?
给定一个复杂的url,我想给用户一个简短而漂亮的url。 例如 如果用户给我url1,我将返回给用户一个名为www.something.com/some-name的url 如果用户给我url2,我将返回给用户一个名为www.something.com/some-other-name的url。 (我将在数据库中存储提供的url及其匹配的url) 我计划接收缩短的url并在数据库中找到相应的url,并将用户重定向到原始url。Ruby on rails 如何在RubyonRails中动态添加URL?,ruby-on-rails,ruby,url,web,Ruby On Rails,Ruby,Url,Web,给定一个复杂的url,我想给用户一个简短而漂亮的url。 例如 如果用户给我url1,我将返回给用户一个名为www.something.com/some-name的url 如果用户给我url2,我将返回给用户一个名为www.something.com/some-other-name的url。 (我将在数据库中存储提供的url及其匹配的url) 我计划接收缩短的url并在数据库中找到相应的url,并将用户重定向到原始url。 但是我应该如何将www.something.com/some-name路
但是我应该如何将www.something.com/some-name路由到RubyonRails中正确的控制器呢?如何动态添加这些路由 这很简单,首先创建一个模型,例如名为
ShortUrl
,带有两个
字段,例如short\u url
和original\u url
然后创建控制器,例如调用它short\u url\u controller
,并将其添加到
路线,但是如果你把路线放在最开始的地方,让它变得非常
通用,它将匹配所有路线,并且您的应用程序无法正常运行,
也就是说,如果应用程序有其他路线,而不仅仅是为了这个目的
get /: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
def ShortUrlsController
您还应该处理错误的url,因为如果url不存在,
find_by
将失败,因此添加一些内容以使用404优雅地失败。您看过了吗,谢谢,我一定会看一看!这真的很有帮助!非常感谢。
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