confirmation de commande page dans rails
-
19-09-2019 - |
Question
J'ai essayé de créer une page de confirmation de commande pour mon application rails, et ne suis pas tout à fait sûr de savoir comment s'y prendre d'une manière reposante.
Il y avait quelques réponses sur cette question qui m'a à mi-chemin, mais le problème était que je n'étais pas sûr de savoir comment mettre en place la forme dans les rails voir afin qu'il prendrait l'utilisateur vers une page de confirmation avec tous les détails au lieu d'une action créer.
En ce moment, mon avis est simple:
<% 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>
Que devrais-je faire pour diriger l'utilisateur vers une page de confirmation qui affiche tous les détails de la commande?
Merci!
Kenji
La solution
Il y avait quelques réponses sur ce question qui m'a à mi-chemin, mais le problème était que je ne tout à fait sûr comment mettre en place la forme les rails vue afin qu'il prendrait l'utilisateur vers une page de confirmation tous les détails au lieu d'une création action.
Diriger une forme à une page non standard est assez simple.
Ajouter une option URL form_for . Telle que
<% form_for :order do |f| %>
devient
<% form_for :order :url => {:action => "confirm"} do |f| %>
Vous aurez besoin de l'action caisse de confirmation dans vos itinéraires, mais qui implique seulement ceci:
map.resources :orders, :collection => {:confirm => :get}
Tout ce que vous avez besoin est maintenant une action de contrôleur de base et une vue:
def confirm
@order = Order.new(params[:order])
unless @order.valid?
render :action => :new
else
end
end
Votre point de vue devrait ressembler presque identique à la vue du spectacle, avec l'ajout d'un formulaire présentant @Order à l'action de créer.
Autres conseils
Pourquoi ne pas vous tirez la confirmation par ajax, par exemple, tirer le résultat et le mettre comme div overlay, lors de la confirmation présenter les valeurs d'origine sous la forme.
Si vous avez encore besoin de le faire votre chemin puis vérifiez wizardly , il est exactement conçu pour de telles utilisations .
Je voudrais mettre à jour la réponse pour Rails plus élégants 4 ou plus. J'espère que cela aidera les débutants comme moi. Ruby est génial! :)
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| %>