搜索网址的一部分(没有协议)

时间:2014-03-13 09:50:11

标签: ruby-on-rails ruby

在我的数据库中,我将urls存储为字符串,并使用协议验证,这意味着在主机名之前必须有“http://”,“https://”或“ftp://”。 此外,我的控制器操作POST请求正在发送,但只是主机名,没有协议。如何在数据库中搜索此主机名? 最简单的解决方案是用协议构造新的字符串,但我不知道我将需要哪一个。它可能是“https”和“http”一样。 有任何想法吗? (注意:这是Rails 3应用程序)

修改

有人指出我的问题不明确,所以我现在会尝试更好地解释它。 在数据库中我有列url。它存储以“http://”,“https://”或“ftp://”开头的链接。 他们可能看起来像这样: 网址:

"http://google.com"
"https://amazon.com"
"ftp://somehostname.com"

我的控制器获取带有主机名的POST请求,它可能是{"domain" => "google.com"}

所以现在我需要做的是在数据库中搜索“google.com”来更新它。但是,正如您所看到的,“域”键下的值不存储协议。所以我不知道它是"http://google.com"还是"https://google.com",但我必须以某种方式找到它。

2 个答案:

答案 0 :(得分:0)

request.host
request.host_with_port
request.url

request.host

使用.where(:url => current_url)进行查询

不完全确定你在问什么,但这些应该指向正确的方向(我希望)

答案 1 :(得分:0)

根据我的理解,你将在你的一个POST参数中获得一个没有协议的URL,并且你希望将它与数据库中有协议的那个匹配。

这就是我要做的事情:

选项1: 如果可行,将协议和URL的其余部分存储在数据库中的两个单独字段中。这种方式很容易比较。

选项2: 使用正则表达式! 让我们说你得到如下的参数:

{"domain" => "google.com"}

然后我会这样做以找到记录: (假设您的模型名称为"记录")

domain = params[:domain]    
@record = Record.where('name = ? OR name = ? OR name = ?', "https://#{domain}", "http://#{domain}", "ftp://#{domain}" )