4

我一直在尝试为我的 rails 应用程序创建一个订单确认页面,但不太确定如何以一种平静的方式进行。

这个问题有几个答案让我半途而废,但问题是我不太确定如何在 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>

我应该做些什么来将用户引导到显示所有订单详细信息的确认页面?

谢谢!

健二

4

3 回答 3

10

这个问题有一些答案让我走到了一半,但问题是我不太确定如何在 rails 视图中设置表单,以便将用户带到包含所有详细信息的确认页面而不是创建动作。

将表单定向到非标准页面非常简单。

添加一个 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 视图相同,并添加了一个将 @order 提交到 create 操作的表单。

于 2009-12-14T21:02:56.423 回答
2

例如,为什么不通过 ajax 拉出确认,拉出结果并将其作为覆盖 div,确认后提交表单中的原始值。

如果您仍然需要按照自己的方式进行操作,那么请检查一下它就是专为此类用途而设计的。

于 2009-12-14T20:48:07.970 回答
0

我想为更优雅的 Rails 4 或更高版本更新答案。我希望它能帮助像我这样的新手。鲁比真棒!:)

路线.rb

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

订单控制器.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| %>
于 2017-05-11T14:41:29.397 回答