Question

A la fin d'un de mes actions de contrôleur que je dois rediriger vers une page qui accepte uniquement les demandes PUT. J'ai essayé de comprendre comment obtenir redirect_to utiliser une demande de vente, mais sans succès.

Est-ce possible? Ou est-il une autre façon d'y parvenir?

Était-ce utile?

La solution 3

Ok, je donc trouvé une solution à mon problème. J'ai trouvé une très bonne écriture sur la situation . Ma mise en œuvre ressemble à ceci:

private
def redirect_post(redirect_post_params)
  controller_name = redirect_post_params[:controller]
  controller = "#{controller_name.camelize}Controller".constantize
  # Throw out existing params and merge the stored ones
  request.parameters.reject! { true }
  request.parameters.merge!(redirect_post_params)
  controller.process(request, response)
  if response.redirected_to
    @performed_redirect = true
  else
    @performed_render = true
  end
end

Alors j'ai appelé cette méthode comme ceci:

  redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token]

J'ai pu « faux » une demande de vente en faisant une demande de poste (à l'aide redirect_post), puis assigner « mettre » à un _method param. Si vous regardez une demande normale tout ce qu'il put est d'une forme post avec un <=> param. Donc, il est un peu hackish mais il fait le travail.

En outre, vous devez vous assurer que lorsque vous appelez les valeurs de <=> votre hachage sont des chaînes sinon des erreurs seront levées.

Autres conseils

Je ne pense pas que vous êtes en mesure de le faire, et je pense que la limitation fait partie de HTTP lui-même.

Lorsque vous utilisez redirect_to -. La redirection se produit comme en-tête "302 Moved" sauf disposition contraire dans les paramètres

Avoir un regard sur le Spec HTTP lui-même ne révèle aucune façon de changer le type de demande, le navigateur fait par redirection.

redirections HTTP :

  

Cette classe de code d'état indique   que d'autres mesures doivent être prises   par l'agent utilisateur afin de remplir   la demande. L'action requise MAI   être effectuée par l'agent utilisateur   sans interaction avec l'utilisateur si   et seulement si le procédé utilisé dans la   deuxième requête est GET ou HEAD.

Je pense que vous devrez peut-être utiliser JavaScript pour obtenir cette fonctionnalité, ou peut-être repenser le flux de contrôle dans votre application.

Si l'action est dans le même contrôleur que lorsque vous essayez de rediriger de, il suffit d'appeler l'action et rendre le modèle comme ceci:

def show
  index
  render :action => "index"
end

Si ce n'est pas, alors je ne sais pas comment vous le faites.

Vous pouvez rediriger vers une autre page qui émet la demande de vente du client, en utilisant Javascript .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top