Rails将params拆分为查询字符串

时间:2014-08-15 23:22:53

标签: android ruby-on-rails ruby android-volley

我使用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

3 个答案:

答案 0 :(得分:1)

在服务器端,您可以在用户输入的查询中使用ruby string方法gsubRuby-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

同样,我很想听到更多/更好的解决方案,所以我会保持开放。