2009-09-16 41 views
171

Làm cách nào để chuyển các tham số trong redirect_to trong đường ray? tôi biết chúng tôi có thể vượt qua id sử dụng này:Truyền tham số trong đường ray redirect_to

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

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

EDIT:

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

redirect_to action: action_name, id: 3 
+3

gì là bạn thực sự cố gắng để thực hiện? Bạn có cân nhắc lưu dữ liệu trong phiên không? –

+1

Những gì bạn đang yêu cầu là không thể - nếu bạn đang thực hiện chuyển hướng, đó phải là yêu cầu GET mà bạn đang chuyển hướng đến, vì vậy các thông số sẽ luôn hiển thị với người dùng của bạn. Thay vào đó, bạn nên lưu trữ nội dung trong phiên. – GregT

Trả lời

146

Chỉ cần gắn nó vào phần tùy chọn:

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

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

+5

nhưng tôi không muốn nó hiển thị cho người dùng .... – markiv

+14

Bạn không thể chuyển hướng bằng POST. Từ 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 nếu và chỉ khi phương pháp được sử dụng trong yêu cầu thứ hai là GET hoặc HEAD." Mở rộng những gì bạn đang thực sự cố gắng hoàn thành và chúng tôi có thể đẩy bạn đi đúng hướng. – jdl

+0

Xin chào Cảm ơn rất nhiều vì phản hồi của bạn. Tôi là một người mới đến 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 hồi của bạn đã làm rõ nhiều nghi ngờ của tôi. Cảm ơn một lần nữa :)) – markiv

68

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') 
38

Bạn có thể vượt qua đối tượng tùy ý để mẫu với tham số flash.

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

Sau đó truy cập chúng trong mẫu qua băm.

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

Đâ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ó cho người dùng nhắn tin. Tốt hơn là lưu trữ các thông số tùy ý trong phiên và sau đó xóa các thông số đó khỏi phiên khi bạn hoàn tất. – GregT

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

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

38

Nếu bạn có một số dữ liệu mẫu ví dụ gửi đến nhà # hành động, bây giờ bạn muốn chuyển hướng họ đến nhà # hành động trong khi vẫn giữ các thông 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 thông số mới? ví dụ: request.parameters, (hoặc +): this =>: rằng –

+4

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

+1

Bạn cũng có thể sử dụng phương thức except để loại trừ các tham 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) ' –

22
redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman') 
3

routes.rb

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

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

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 
Các vấn đề liên quan