2009-06-15 21 views
12
redirect_to :controller=>'groups',:action=>'invite' 

pero recibí un error porque redirecciona_para enviar el método GET Quiero cambiar este método a 'POST' no hay: opción de método en redirección_¿qué haré? ¿Puedo hacer esto sin redirect_to?Rails redirect_to post method?

Editar:

tengo esto en grupos/invite.html.erb

<%= link_to "Send invite", group_members_path(:group_member=>{:user_id=>friendship.friend.id, :group_id=>@group.id,:sender_id=>current_user.id,:status=>"requested"}), :method => :post %> 

Esta llamada de enlace de crear una acción en el controlador GROUP_MEMBERS, y después de crear acción realizada Quiero mostrar grupos/invite. html.erb con group_id (me refiero a después haga clic en 'enviar invitación' GROUP_MEMBERS serán creados y luego se le aparecen la página actual) así:

redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id 

después solicitud redirect_to º es con el método GET, se llama acción show en el grupo y tomar Invitar como Identificación y dar este error

Couldn't find Group with ID=invite 

mi Invitar a la acción en el grupo

def invite 
@friendships = current_user.friendships.find(:all,:conditions=>"status='accepted'") 
@requested_friendships=current_user.requested_friendships.find(:all,:conditions=>"status='accepted'") 
@group=Group.find(params[:group_id]) 
end 

La solución es que tengo que redirigir esto con el método POST pero no pude encontrar una manera.

Solución fea: He resuelto este problema que no prefiero. Todavía espero si tienes una solución de manera justa.

Mi solución es agregar ruta para invitar a deshacerse del error "No se pudo encontrar el grupo con ID = invitación".

en routes.rb

map.connect "/invite",:controller=>'groups',:action=>'invite' 

en Crear acción

redirect_to "/invite?group_id=#{@group_member.group_id}" 

que llamo esta solución en un lenguaje de mayo 'amele yontemi' en 'método trabajador manual' Inglés (creo).

+0

¿por qué le gustaría hacerlo de esta manera? ¿podría proporcionar más contexto? – marcgg

+0

De acuerdo, necesitamos más información sobre lo que está intentando lograr antes de que podamos darle una buena respuesta. –

+2

posible duplicado de [redirigir \ _a usar POST en rieles] (http://stackoverflow.com/questions/985596/redirect-to-using-post-in-rails) –

Respuesta

9

Parece que usted está consiguiendo un tropiezo por la forma El enrutamiento de rieles funciona. Este código:

redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id 

crea una URL que se ve algo como /groups/invite?group_id=1.

Sin la asignación en su routes.rb, el enrutador de Rails asigna esto a la acción show, no a invite. La parte invite de la dirección URL se asigna a params[:id] y cuando intenta encontrar ese registro en la base de datos, falla y obtiene el mensaje que encontró.

Si está utilizando rutas REST, que ya tienen una línea map.resources que tiene este aspecto:

map.resources :groups 

Es necesario añadir una acción personalizada para invite:

map.resources :groups, :member => { :invite => :get } 

A continuación, cambiar su referencia a params[:group_id] en el método #invite para usar solo params[:id].

31

La respuesta es que no puede hacer una POST usando redirect_to.

Esto se debe a lo redirect_to no se acaba de enviar una cabecera de redirección HTTP 30x al navegador que a su vez recibe el URL de destino y navegadores sólo se pone en redirecciones

+4

Sí, tengo esto, pero ¿hay alguna manera de resolverlo? mi problema con redirect_to o sin? –

5

Encontré una solución parcial que necesitaba para que esto suceda en Rails 3. Hice una ruta que llamaría al método en ese controlador que requiere una llamada posterior. Una línea de "route.rb", tales como:

match '/create', :to => "content#create" 

Es probable que sea feo, pero tiempos desesperados requieren medidas desesperadas. Solo pensé en compartir.