在我的数据库中,我将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"
,但我必须以某种方式找到它。
答案 0 :(得分:0)
request.host
request.host_with_port
request.url
使用.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}" )