2009-12-14 72 views
4

我一直在为我的导轨应用程序创建一个订单确认页面,我不太确定如何以一种平静的方式去做。在导轨中订购确认页面

this问题上有几个答案让我半途而废,但问题是我不太清楚如何在rails视图中设置窗体,以便将用户带到确认页面与他们所有的细节,而不是创建行动。

现在我的看法很简单:

 <% 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> 

什么事情我应该做的,以将用户引导到一个确认页面,显示所有订单的详细信息?

谢谢!

贤治

回答

10

有关于这个问题 这让我半路上, 但问题是,我是不是几个答案 很清楚如何设置的形式, 轨道视图,以便将采取 用户以确认页面 的所有详细信息而不是创建 操作。

将窗体指向非标准页面非常简单。

添加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 

您的视图看起来应该与show view几乎完全相同,并增加了一个表单提交@order到create操作。

+0

这几乎可行。问题似乎是信用卡号码和到期日期。这些号码不存储在订单对象中,并直接发送到支付网关。 在模型中,我有这个: attr_accessor:card_number,:card_verification 这些属性似乎没有拿起确认页上,当我点击提交。 – 2009-12-14 23:11:11

+0

如果它们在Order上被定义为attr \ _accessors。它们应该在确认视图中可用。 – EmFi 2009-12-14 23:28:08

+0

它似乎工作,如果我有另一种形式看起来相同的“新”行动,但在这种情况下,我想只呈现与订单信息的文本与“编辑此订单”的链接去回到新的行动。 – 2009-12-14 23:44:43

2

你为什么不通过AJAX拉确认例如,拉动的结果,并把它作为一个覆盖DIV,经确认的形式提交的原始值。

如果你仍然需要这样做,然后检查wizardly,它是专为这种用途而设计的。

+0

感谢。看起来阿贾克斯可能是要走的路。我必须研究这个。 – 2009-12-14 20:57:15

0

我想更新更优雅的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| %>