página de confirmação do pedido em trilhos
-
19-09-2019 - |
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
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| %>