2015-10-21 25 views
5

Karmaşıklık ileterek sorgu argümanları ile URI nesnesi nasıl oluşturulur? Birçok argümanlar okunmaz ve bakımı zor olurdu için Ruby'de karmadan sorgu bağımsız değişkenleri olan URI nasıl oluşturulur

https://example.com?a=argument1&b=argument2

ancak sorgu dizesi inşa düşünüyorum üretir

URI::HTTPS.build(host: 'example.com', query: "a=#{hash[:a]}, b=#{[hash:b]}")

:

Beraber sorgu oluşturabilir. Hash ileterek sorgu dizesi oluşturmak istiyorum. Gibi aşağıdaki örnekte:

NoMethodError: undefined method `to_str' for {:a=>"argument1", :b=>"argument2"}:Hash 

yükseltir o URI API kullanarak hash dayalı sorgu dizesi oluşturmak mümkün mü

hash = { 
    a: 'argument1', 
    b: 'argument2' 
    #... dozen more arguments 
} 
URI::HTTPS.build(host: 'example.com', query: hash) 

? Maymun yama hash nesnesini istemiyorum ...

cevap

8

'#to_query' hash. Eğer raylar kullanmıyorsanız

hash = { 
    a: 'argument1', 
    b: 'argument2' 
    #... dozen more arguments 
} 
URI::HTTPS.build(host: 'example.com', query: hash.to_query) 

=> https://example.com?a=argument1&b=argument2

olanlar kullanmayan Raylar veya Active Destek için require 'uri'

+7

'to_query olduğunu hatırlamak 'Rails sadece bir yöntemdir. Ruby'de mevcut değil. –

+1

@marc_ferna soruları raylar etiketi üzerinde ruby ​​vardır. Şunları dahil edebilirsiniz: raylı olmayan projelerde ActiveSupport –

1

için, Ruby standart kitaplığı kullanarak çözüm

hash = { 
    a: 'argument1', 
    b: 'argument2' 
} 
URI::HTTPS.build(host: 'example.com', query: URI.encode_www_form(hash)) 
=> #<URI::HTTPS https://example.com?a=argument1&b=argument2> 
İlgili konular