Raylarda parametre geçirme redirect_to


202

Redirect_to içindeki parametreleri raylarda nasıl iletiriz? Bunu kullanarak id geçebilir biliyorum:

redirect_to :action => action_name,:id => 3

Bazı form verileri gibi ek parametreler geçmek istersem nasıl elde edilir?

DÜZENLE:

Ruby 2 sözdizimi için yukarıdaki snippet'i şu şekilde güncellemeniz gerekir:

redirect_to action: action_name, id: 3

3
Aslında neyi başarmaya çalışıyorsunuz? Oturumdaki verileri kaydetmeyi düşündünüz mü?
Michael Sepcot

1
İstediğiniz şey mümkün değildir - bir yönlendirme yapıyorsanız, yönlendirdiğiniz bir GET isteği olmalıdır, bu nedenle parametreler her zaman kullanıcılarınız tarafından görülebilir. Bunun yerine oturumda bir şeyler depolamalısınız.
GregT

Yanıtlar:


174

Bunları seçeneklere eklemeniz yeterlidir:

redirect_to controller: 'thing', action: 'edit', id: 3, something: 'else'

Verim verecek /thing/3/edit?something=else


22
Bir POST ile yönlendiremezsiniz. 3xx tanımları altındaki HTTP 1.1 belgelerinden: "Gereken işlem, yalnızca ikinci istekte kullanılan yöntem GET veya HEAD ise, kullanıcı aracısıyla kullanıcıyla etkileşim olmadan gerçekleştirilebilir." Gerçekten neyi başarmaya çalıştığınıza genişletin ve sizi muhtemelen doğru yönde itebiliriz.
jdl

Merhaba Yanıtınız için çok teşekkür ederim. Web geliştirmeye yeni başladım. Bir eylemi çağırmanın farklı yollarını öğrenmeye çalışıyorum. Yanıtınız şüphelerimin çoğunu netleştirdi. Tekrar teşekkürler :))
markiv

Başparmak havaya. 1 saatten beri bunu arıyorum.

86

RESTful kaynaklarını kullanıyorsanız aşağıdakileri yapabilirsiniz:

redirect_to action_name_resource_path(resource_object, param_1: 'value_1', param_2: 'value_2')

or
#You can also use the object_id instead of the object
redirect_to action_name_resource_path(resource_object_id, param_1: 'value_1', param_2: 'value_2')

or
#if its a collection action like index, you can omit the id as follows
redirect_to action_name_resource_path(param_1: 'value_1', param_2: 'value_2')

#An example with nested resource is as follows:
redirect_to edit_user_project_path(@user, @project, param_1: 'value_1', param_2: 'value_2')

46

Örneğin home # action öğesine gönderilen bazı form verileriniz varsa, şimdi parametreleri tutarken house # act'e yönlendirmek istiyorsunuz, bunu yapabilirsiniz

redirect_to act_house_path(request.parameters)


1
Bunu nasıl birleştireceğinizi ve yeni parametreleri biliyor musunuz? yani request.parameters, (veya +): this =>: that
Chris Edwards

5
Birleştirme yöntemini kullanabilirsiniz. Örneğin:redirect_to act_house_path(request.parameters.merge(key: "value"))
GregT

3
Birleştirme işleminden sonra istenmeyen parametreleri hariç tutmak için hariç yöntemini de kullanabilirsiniz:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
mr io

39

Flash parametresi ile şablona rastgele nesneler iletebilirsiniz.

 redirect_to :back, flash: {new_solution_errors: solution.errors}

Ve sonra karma yoluyla şablonda onlara erişin.

<% flash[:new_solution_errors].each do |err| %>

63
Bu kötü bir uygulamadır. Bu yöntem, flash mesaj nesnesini yanlış kullanır ve kullanıcı mesajlaşmaya yöneliktir. Daha iyisi, oturumda rasgele parametreleri saklamak ve daha sonra işiniz bittiğinde bu parametreleri oturumdan silmek olabilir.
GregT


7
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id

6
Lütfen biraz daha açıklama yapabilir misiniz? Sadece bir kod örneği gerçekten yeterli değil.
29on12

7

Ek URL parametrelerini (denetleyici, eylem, kimlik vb. Değil) iletmenin bir yolunu arıyorsanız, işte bunu yapmak için sağlam bir yöntem:

object_path(@object, params: request.query_parameters)

Bu utm parametreleri veya kaybetmek istemediğiniz diğer ek parametreler boyunca geçecektir .


4

routes.rb

 match 'controller_name/action_name' => 'controller_name#action_name', via: [:get, :post], :as => :abc

Parametrelerle yeniden yönlendirmek istediğiniz herhangi bir denetleyici aşağıda verilmiştir:

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 

3

Yolunuzu yönlendirin paramsve aşağıdaki noktalara dönün:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.