2009-09-16 10 views
171

W jaki sposób przekazujemy parametry w przekierowaniu na szynach? Wiem, że możemy przekazać za pomocą tego identyfikatora:Przekazywanie parametrów w szynach przekierowanie do

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

Jeśli chcę przekazać dodatkowe parametry jak niektóre dane formularzy, jak to osiągnąć?

EDIT:

Dla Ruby 2 składni musisz zaktualizować fragment wyżej:

redirect_to action: action_name, id: 3 
+3

Czego właściwie chce osiągnąć? Czy rozważałeś zapisanie danych w sesji? –

+1

To, o co prosisz, nie jest możliwe - jeśli wykonujesz przekierowanie, musi to być żądanie GET, do którego przekierowujesz, więc parametry będą zawsze widoczne dla Twoich użytkowników. Zamiast tego należy przechowywać rzeczy w sesji. – GregT

Odpowiedz

146

Wystarczy dołączyć je do opcji:

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

przyniesie /thing/3/edit?something=else

+5

, ale nie chcę, aby był widoczny dla użytkownika .... – markiv

+14

Nie można przekierować za pomocą POST. Z dokumentów HTTP 1.1 pod definicjami 3xx: "Wymagana czynność MOŻE być wykonana przez klienta użytkownika bez interakcji z użytkownikiem wtedy i tylko wtedy, gdy metoda zastosowana w drugim żądaniu to GET lub HEAD." Rozwiń to, co naprawdę chcesz osiągnąć, a możemy prawdopodobnie popchnąć Cię we właściwym kierunku. – jdl

+0

Witam Bardzo dziękuję za odpowiedź. Jestem początkującym w tworzeniu stron internetowych. Próbuję poznać różne sposoby wywoływania akcji. Twoja odpowiedź wyjaśniła wiele moich wątpliwości. Jeszcze raz dziękuję :)) – markiv

68

Jeśli używasz zasobów RESTful, możesz wykonać następujące czynności:

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

Możesz przekazywać dowolne obiekty do szablonu za pomocą parametru flash.

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

A następnie dostęp do nich w szablonie za pośrednictwem skrótu.

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

To jest kiepska praktyka. Ta metoda wykorzystuje obiekt Flash, przeznaczony do przesyłania komunikatów użytkownika. Lepiej byłoby przechowywać dowolne parametry w sesji, a następnie usunąć te parametry z sesji, gdy skończysz. – GregT

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

Czy możesz podać dodatkowe wyjaśnienie. Tylko przykład kodu jest naprawdę niewystarczający. – simonmenke

38

Jeśli masz jakieś dane formularza na przykład wysłane do domu # działaniu, teraz chcesz przekierować je do domu # akt zachowując parametry, można to zrobić

redirect_to act_house_path(request.parameters)

+1

Czy wiesz, jak połączyć to z nowymi parametrami? tj. parametry request (lub +): this =>: that –

+4

Możesz użyć metody scalania. Na przykład: 'redirect_to act_house_path (request.parameters.merge (key:" value "))' – GregT

+1

Można również użyć metody except w celu wykluczenia niechcianych parametrów po scaleniu: '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 

Każdy kontroler chcesz przekierować z parametrami są podane poniżej:

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 
Powiązane problemy