Pergunta

No final de uma das minhas ações de controlador eu preciso redirecionar para uma página que só aceita pedidos colocados. I foram tentando descobrir como obter redirect_to usar um pedido de venda, mas sem sucesso.

Isso é possível? Ou existe outra maneira de conseguir isso?

Foi útil?

Solução 3

Ok, então eu encontrei uma solução para o meu problema. Eu encontrei um muito bom escrever sobre a situação aqui . Minha implementação esta aparência:

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

Então eu chamei esse método como este:

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

Então, eu era capaz de 'fake' um pedido put fazendo uma solicitação post (usando redirect_post) e, em seguida, atribuindo 'put' para um param _method. Se você olhar para um pedido put normal de tudo, é um post a partir de um formulário com um param _method. Isso é um pouco hackish, mas ele começa o trabalho feito.

Além disso, você tem que ter certeza que quando você chamar redirect_post os valores de sua haxixe são strings caso contrário os erros serão jogados.

Outras dicas

Eu não acho que você é capaz de fazer isso, e eu suspeito que a limitação é parte de HTTP em si.

Ao usar o redirect_to -. O redirecionamento acontece como "302 movido" cabeçalho salvo indicação em contrário nos parâmetros

Ter um olhar para o Spec HTTP em si não revela nenhuma maneira de mudar o tipo de solicitação o navegador faz através de redirecionamento.

redirecionamentos HTTP :

Esta classe de código de status indica que novas necessidades de ação a ser tomada pelo agente de utilizador, a fim de cumprir o pedido. A ação necessária MAIO ser levada a cabo pelo agente de utilizador sem interacção com o utilizador, se e apenas se o método utilizado no segundo pedido é GET ou HEAD.

Eu acho que você pode precisar usar JavaScript para atingir essa funcionalidade, ou talvez repensar o fluxo de controle em sua aplicação.

Se a ação está no mesmo controlador como onde você está tentando redirecionar a partir, basta ligar para a ação e tornar o modelo da seguinte forma:

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

Se não é, então eu não sei como fazer isso.

Você pode redirecionar para uma página diferente que emite o pedido de venda do cliente, usando Javascript .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top