レールでの注文確認ページ
-
19-09-2019 - |
質問
私は私のレールのアプリのための注文確認ページを作成しようとしている、と安らかな方法でそれについて移動する方法が非常に確認していないしてきます。
こののには、いくつかの答えがありました質問中途半端そこに私を得たが、問題は、私はそれが代わりにcreateアクションのすべての詳細を確認ページにユーザーを取るように表示レールにフォームを設定するかどうかはかなり確実ではないということだったという。
今私の見解は簡単です。
<% 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>
私はすべての注文の詳細を示して確認ページにユーザーを指示するためにどのような事をやっているでしょうか?
ありがとうございます。
健二
解決
この上のいくつかの答えがありました 中途半端そこに私を得た質問、 しかし、問題は、私はないということでした でフォームを設定する方法がかなり確実 それは取るようにレールを見ます と確認ページへのユーザー 代わりに、作成のすべての詳細 アクションます。
非標準のページにフォームを向けることは非常に単純です。
urlオプションのform_for に追加します。 このようなこと
<% form_for :order do |f| %>
となります。
<% form_for :order :url => {:action => "confirm"} do |f| %>
あなたは木枠にあなたのルートで確認アクションが必要になりますが、それはこれだけが含まれます:
map.resources :orders, :collection => {:confirm => :get}
あなたが今必要なのは、基本的なコントローラのアクションとビューがあります:
def confirm
@order = Order.new(params[:order])
unless @order.valid?
render :action => :new
else
end
end
あなたのビューを作成するアクションに@order提出フォームを追加して、ビューの表示とほぼ同じになります。
他のヒント
なぜあなたは確認時にフォームで元の値を提出し、その結果を引き出して、オーバーレイdivのようにそれを入れています。
、例えばAJAXを経由して確認を引っ張らないでくださいあなたはまだそれをあなたの方法を行う必要がある場合は、チェック wizardly に、それはまさにこのような用途のために設計されていますます。
私は、よりエレガントなRailsの4またはアップのための答えを更新したいと思います。 私はそれが私のような初心者に役立つことを願っています。 Rubyは素晴らしいです! :)
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| %>