Pergunta

Eu tenho tentado criar uma página de confirmação do pedido para o meu rails aplicativo, e não estou muito certo como ir sobre ele de uma forma tranquila.

Houve algumas respostas sobre este pergunta que me pegou no meio do caminho, mas o problema era que eu não tinha certeza de como configurar a forma como os trilhos ver para que ele levaria o usuário para uma página de confirmação com todos os seus detalhes, em vez de uma criação de ação.

Agora meu ponto de vista é simples:

        <% form_for :order do |f| %>
      <%= f.error_messages %>
      <p>
        <%= f.label :first_name %><br />
        <%= f.text_field :first_name, :size => 15 %>
      </p>
      <p>
        <%= f.label :last_name %><br />
        <%= f.text_field :last_name, :size => 15 %>
      </p>
      (Be sure to enter your name as it appears on your card)
      <p>
        <%= f.label :card_type %><br />
        <%= f.select :card_type, [["Visa", "visa"], ["MasterCard", "master"], ["Discover", "discover"], ["American Express", "american_express"]] %>
      </p>
      <p>
        <%= f.label :card_number %><br />
        <%= f.text_field :card_number %>
      </p>
      <p>
        <%= f.label :card_verification, "Card Verification Value (CVV)" %><br />
        <%= f.text_field :card_verification, :size => 3 %>
      </p>
      <p>
        <%= f.label :card_expires_on %><br />
        <%= f.date_select :card_expires_on, :discard_day => true, :start_year => Date.today.year, :end_year => (Date.today.year+10), :add_month_numbers => true %>
      </p>
  <p><%= f.submit "Submit" %></p>

O que as coisas que eu deveria estar fazendo para direcionar o usuário para uma página de confirmação que mostra todos os detalhes da ordem?

Obrigado!

Kenji

Foi útil?

Solução

Houve algumas respostas sobre este pergunta que me pegou no meio do caminho, mas o problema era que eu não era certeza de como configurar o formulário em os trilhos visualizar de modo que seria necessário o usuário para uma página de confirmação com todos os seus detalhes, em vez de uma criação ação.

Dirigir um formulário para uma página padrão não é muito simples.

Adicione uma opção de url form_for . Tal que

<% form_for :order do |f| %>

se torna

<% form_for :order :url => {:action => "confirm"} do |f| %>

Você precisará de caixa a ação de confirmação em suas rotas, mas que apenas envolve o seguinte:

map.resources :orders, :collection => {:confirm => :get}

Tudo que você precisa agora é uma ação do controlador de base e um ponto de vista:

def confirm
  @order = Order.new(params[:order])
  unless @order.valid?
    render :action => :new
  else       
  end
end

Sua visão deve olhar quase idêntico ao show ponto de vista, com a adição de uma forma de enviar @order à ação criar.

Outras dicas

Por que você não puxar a confirmação via ajax por exemplo, puxar o resultado e colocá-lo como um div sobreposição, após a confirmação apresentar os valores originais na forma.

Se você ainda precisa fazer do seu jeito, em seguida, verifique wizardly , é exatamente projetado para tais usos .

Eu gostaria de atualizar a resposta para Rails mais elegantes 4 ou para cima. Espero que ele vai ajudar os novatos como eu. Ruby é incrível! :)

routes.rb

resources :orders do
  collection do
    post 'confirm'
  end
 end

orders_controller.rb

def confirm
  @order = Order.new(order_params) # GET THE POST parameters
  render :new if @order.invalid? # Return if false
end

form.html.erb

<%= form_for @order, url: {action: 'confirm'} do |f| %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top