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.