2009-11-13 29 views
10

Rails güncellemesi nedeniyle mevcut bir redirect_to kullanımı var ve bir soruna yol açtı. Denemeyi denedim ve URL dizesini manuel olarak oluşturmanın dışında, utanç gibi görünen kullanıcı dışında, sorgulama parametrelerine ek olarak Rails olmayan bir kullanıcıya göndermek için redirect_to kullanmanın bir yolunu bulmuyorum. Daha önce, sadece basit:Redirect_to, sorgu paramları olan Rails olmayan bir URL'ye nasıl kullanılır?

redirect_to "http://www.web.com/myurl" "parm" 

çalışıyordu - bu adresten üzerine "parm" eklenmeli ve çoklu parms doğru şekilde ele alındı. Artık böyle değil, bu yüzden bunu yapmanın yeni/daha iyi bir yolu olup olmadığını merak ediyordum. Dokümanlar, bir Hash'ın dahil edilmesinin işe yarayacağını ima eder, ancak aşağıdaki gibi değildir:

redirect_to ("http://www.web.com/myurl", :parm => "foo") 
redirect_to ("http://www.web.com/myurl", { :parm => "foo" }) 

Hiçbiri işe yaramaz. URL dizesini el ile oluşturmak iyi çalışır, ancak bu çalışmayı daha güzel bir şekilde yapan bir kişi var mı?

cevap

3

documentation'a göre, url_for tarafından tanınmayan tüm parametreler, Rota modüllerine aktarılır, bu nedenle, kuramınızda, parametreniz, parametreniz, aradığı varsayılan ayarlardan birini geçersiz kılmadıkça çalışmalıdır. Bu yardımcı olur

redirect_to 'http://www.web.com/myurl', :overwrite_params => { :parm => 'foo' } 

Hope:

Ancak, sözde geçebilir bir :overwrite_params karma vardır.

+0

bu çalışmaz. Dize direkt olarak kullanılır. – deepak

+0

@deepak Rayların hangi versiyonunu kullanıyorsunuz? 2009'dan beri her şey çok değişti :-) –

+1

raylar üzerinde çalıştı 3.2.8, son kararlı ben inanıyorum – deepak

0

bu en basit çözüm olarak Rails 5.0 Koşu ve bulundu:

args = { foo: 'bar' } 
redirect_to 'https://otherwebsite.com/path?' + args.to_query 

Ben ev sahibi belirterek zaman çalıştı bu sayfada bulunan diğer tek çözüm (kendi yazı üzerine Topher Fangio yorumuna bakınız) bununla birlikte, orijinal URL'nin farklı bir bağlantı noktasında (genellikle dev ortamlarda olduğu gibi) portu da belirtmeniz gerekir.

İlgili konular