我使用Volley从Android应用发送我的rails API请求。这是有问题的搜索方法,它接受params(和utf8)的查询字符串。
def index
@items = Item.search(params)
end
我的请求网址如下:
"https://www.myapp.com/api/items.json/?utf8=✓&query=" + query;
// query is a string from user input
我想将query
拆分为查询字符串,因为目前query
只是一个字符串。
我希望我可以做类似的事情:
def index
my_params = # turn query into query string, make new hash with results and utf8 param
@items = Item.search(my_params)
end
我如何做到这一点?或者,有没有一种方法可以在客户端发送query
之前将其分开?在这种情况下,query
可以包含任意数量的单词。
更新
要明确的是,我正在询问如何将现有的参数query
(看起来像"large red balloons"
)转换为可以传递给我的方法的正确查询字符串。< / p>
我的方法在params中期待的是:
utf8=✓&query=large+red+balloons
答案 0 :(得分:1)
在服务器端,您可以在用户输入的查询中使用ruby string
方法gsub
。 Ruby-Doc中列出的一般格式:
your_string.gsub(pattern, replacement)
#=> a modified version of your_string in which every previous occurrence
#=> of pattern has been "overwritten" by the replacement.
假设您的用户查询为params[:query] = "big red balloon"
(因为它是一个参数而您在上面引用为query
),那么您可以
query = params[:query].gsub(' ', '+')
#=> "big+red+balloon"
"https://www.myapp.com/api/items.json/?utf8=✓&query=" + query
#=> "https://www.myapp.com/api/items.json/?utf8=✓&query=big+red+balloon"
如果您担心查询字符串的优缺点,可以用%20
s替换用户查询中的空格:
query = params[:query].gsub(' ','%20')
#=> "big%20red%20balloon"
但根据@BroiSatse提供的帖子参考,这不应该是一个问题。
答案 1 :(得分:0)
你可以这样做:
"https://www.myapp.com/api/items.json/?utf8=✓&#{URI.encode_www_form(query: query)}"
答案 2 :(得分:0)
我在客户端找到了一个解决方案,我认为这可能比在Rails服务器端处理这个更好。知道比我更多的人可以评论,如果他们喜欢,因为我不是专家。我会发布我的解决方案,并将这个答案留给那些可能有比我更好的解决方案的人。
String newQueryString = "";
String queryArr[] = query.split(" ");
for (int i = 0; i < queryArr.length; i++) {
newQueryString += queryArr[i];
// new for loop to add '+' because I dont want a '+' at the end of the new query string
for (int k = 0; k < queryArr.length - 1; k++) {
newQueryString += "+";
}
}
当查询为"big red balloon"
时,返回:
"https://myapp.com/api/items.json/?utf8=✓&query=big+red+balloon
同样,我很想听到更多/更好的解决方案,所以我会保持开放。