Melewati parameter di rail redirect_to

202

Bagaimana kita melewatkan parameter dalam redirect_to di rails? Saya tahu kami dapat melewati id menggunakan ini:

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

Jika saya ingin memberikan parameter tambahan seperti beberapa formulir, bagaimana mencapainya?

EDIT:

Untuk sintaks Ruby 2 Anda harus memperbarui cuplikan di atas ke:

redirect_to action: action_name, id: 3
markiv
sumber
3
Apa yang sebenarnya ingin Anda capai? Sudahkah Anda mempertimbangkan untuk menyimpan data dalam sesi ini?
Michael Sepcot
1
Apa yang Anda minta tidak mungkin - jika Anda melakukan pengalihan, itu haruslah permintaan GET yang Anda arahkan, sehingga params akan selalu terlihat oleh pengguna Anda. Anda harus menyimpan barang di sesi sebagai gantinya.
GregT

Jawaban:

174

Cukup tambahkan mereka ke opsi:

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

Akan menghasilkan /thing/3/edit?something=else

Michael Sepcot
sumber
22
Anda tidak dapat mengalihkan dengan POST. Dari HTTP 1.1 dokumen di bawah definisi 3xx: "Tindakan yang diperlukan DAPAT dilakukan oleh agen pengguna tanpa interaksi dengan pengguna jika dan hanya jika metode yang digunakan dalam permintaan kedua adalah GET atau HEAD." Perluas apa yang sebenarnya ingin Anda capai dan kami mungkin bisa mendorong Anda ke arah yang benar.
jdl
Hai Terima kasih banyak atas tanggapan Anda. Saya pemula dalam pengembangan web. Saya mencoba untuk mengetahui berbagai cara untuk melakukan suatu tindakan. Tanggapan Anda telah menjelaskan banyak keraguan saya. Terima kasih lagi :))
markiv
Jempolan. Saya sudah mencari ini sejak 1 jam.
86

Jika Anda menggunakan sumber daya RESTful Anda dapat melakukan hal berikut:

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')
Sohan
sumber
46

Jika Anda memiliki beberapa data formulir, misalnya dikirim ke tindakan # rumah, sekarang Anda ingin mengarahkannya ke tindakan # rumah sambil menjaga parameter, Anda dapat melakukan ini

redirect_to act_house_path(request.parameters)

v4r
sumber
1
Apakah Anda tahu bagaimana Anda akan menggabungkan ini, ditambah parameter baru? yaitu request.parameters, (atau +): this =>: that
Chris Edwards
5
Anda bisa menggunakan metode gabungan. Sebagai contoh:redirect_to act_house_path(request.parameters.merge(key: "value"))
GregT
3
Anda juga dapat menggunakan metode kecuali untuk mengecualikan param yang tidak diinginkan setelah penggabungan:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
mr io
39

Anda dapat mengirimkan objek acak ke templat dengan parameter flash.

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

Dan kemudian mengaksesnya di templat melalui hash.

<% flash[:new_solution_errors].each do |err| %>
vermasque
sumber
63
Ini adalah praktik yang buruk. Metode ini menyalahgunakan objek flash, yang dimaksudkan untuk pengiriman pesan pengguna. Lebih baik menyimpan parameter sewenang-wenang di sesi dan kemudian menghapus parameter dari sesi setelah selesai.
GregT
30
redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman')
Muhammad Suleman
sumber
7
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id
Karwin
sumber
6
Bisakah Anda memberikan penjelasan lebih lanjut? Contoh kode saja tidak cukup.
simonmenke
7

Jika Anda mencari cara untuk melewatkan parameter URL tambahan (bukan pengontrol, tindakan, id, dll), berikut adalah metode yang kuat untuk melakukannya:

object_path(@object, params: request.query_parameters)

Itu akan meneruskan parameter utm atau params tambahan lain yang tidak ingin Anda hilangkan.

Abram
sumber
4

route.rb

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

Kontroler apa pun yang ingin Anda redirect dengan parameter diberikan di bawah ini:

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 
Mitesh Sharma
sumber
3

Rutekan jalur Anda, dan ambil params, dan kembali:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
Darlan Dieterich
sumber