Truyền tham số trong rails redirect_to


202

Làm thế nào để chúng ta truyền tham số trong redirect_to trong rails? Tôi biết chúng ta có thể vượt qua id bằng cách này:

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

Nếu tôi muốn vượt qua các tham số bổ sung như một số dữ liệu biểu mẫu, làm thế nào để đạt được nó?

BIÊN TẬP:

Đối với cú pháp Ruby 2, bạn phải cập nhật đoạn trích ở trên thành:

redirect_to action: action_name, id: 3

3
Bạn thực sự đang cố gắng để đạt được điều gì? Bạn đã xem xét việc lưu dữ liệu trong phiên chưa?
Michael Sepcot

1
Những gì bạn yêu cầu là không thể - nếu bạn đang thực hiện chuyển hướng, đó phải là một yêu cầu NHẬN mà bạn đang chuyển hướng đến, vì vậy các thông số sẽ luôn hiển thị cho người dùng của bạn. Bạn nên lưu trữ công cụ trong phiên thay thế.
GregT

Câu trả lời:


174

Chỉ cần thêm chúng vào các tùy chọn:

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

Sẽ mang lại /thing/3/edit?something=else


22
Bạn không thể chuyển hướng với một POST. Từ các tài liệu HTTP 1.1 theo định nghĩa 3xx: "Hành động bắt buộc CÓ THỂ được thực hiện bởi tác nhân người dùng mà không tương tác với người dùng khi và chỉ khi phương thức được sử dụng trong yêu cầu thứ hai là GET hoặc HEAD." Mở rộng về những gì bạn đang thực sự cố gắng thực hiện và có lẽ chúng tôi có thể đẩy bạn đi đúng hướng.
jdl

Xin chào Cảm ơn rất nhiều vì phản hồi của bạn. Tôi là người mới phát triển web. Tôi đang cố gắng để biết các cách khác nhau để gọi một hành động. Phản ứng của bạn đã làm rõ rất nhiều nghi ngờ của tôi. Cảm ơn một lần nữa :))
markiv

Đồng ý. Tôi đã tìm kiếm điều này từ 1 giờ.

86

Nếu bạn đang sử dụng tài nguyên RESTful, bạn có thể làm như sau:

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

Nếu bạn có một số dữ liệu biểu mẫu ví dụ được gửi đến nhà # hành động, bây giờ bạn muốn chuyển hướng chúng đến nhà # hành động trong khi giữ các tham số, bạn có thể làm điều này

redirect_to act_house_path(request.parameters)


1
Bạn có biết làm thế nào bạn sẽ kết hợp điều này, cộng với các tham số mới? tức là request.parameter, (hoặc +): this =>: that
Chris Edwards

5
Bạn có thể sử dụng phương thức hợp nhất. Ví dụ:redirect_to act_house_path(request.parameters.merge(key: "value"))
GregT

3
Bạn cũng có thể sử dụng phương pháp ngoại trừ để loại trừ các thông số không mong muốn sau khi hợp nhất:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
mr io

39

Bạn có thể truyền các đối tượng tùy ý vào mẫu bằng tham số flash.

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

Và sau đó truy cập chúng trong mẫu thông qua hàm băm.

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

63
Đây là thực hành kém. Phương pháp này lạm dụng đối tượng flash, mục đích của nó là nhắn tin cho người dùng. Tốt hơn là lưu trữ các tham số tùy ý trong phiên và sau đó xóa các tham số đó khỏi phiên khi bạn hoàn tất.
GregT


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

6
Bạn có thể vui lòng cung cấp thêm một số giải thích. Chỉ cần một ví dụ mã là thực sự không đủ.
simonmenke

7

Nếu bạn đang tìm cách để vượt qua các tham số URL bổ sung (không phải bộ điều khiển, hành động, id, v.v.), thì đây là một phương pháp mạnh mẽ để làm như vậy:

object_path(@object, params: request.query_parameters)

Điều đó sẽ vượt qua các tham số utm hoặc bất kỳ thông số bổ sung nào khác mà bạn không muốn mất.


4

tuyến đường.rb

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

Bất kỳ bộ điều khiển nào bạn muốn chuyển hướng với các tham số được đưa ra dưới đây:

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

3

Định tuyến đường đi của bạn và lấy paramsvà trả lại:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.