【问题标题】:Order confirmation page in railsrails中的订单确认页面
【发布时间】:2010-12-26 13:51:28
【问题描述】:

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

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>

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

谢谢!

健二

【问题讨论】:

    标签: ruby-on-rails forms rest routes confirmation


    【解决方案1】:

    对此有几个答案 让我半途而废的问题, 但问题是我不是 很确定如何设置表格 轨道视图,以便它需要 用户到确认页面 他们所有的细节而不是创建 行动。

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

    添加一个网址选项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 提交到创建操作的表单。

    【讨论】:

    • 这几乎可以工作。问题似乎是信用卡号和到期日期。这些数字不存储在订单对象中,而是直接发送到支付网关。在模型中我有这个: attr_accessor :card_number, :card_verification 当我点击提交时,这些属性似乎没有在确认页面上被选中。
    • 如果它们在 Order 上被定义为 attr_accessors。它们应该在确认视图中可用。
    • 如果我有另一种看起来与“新”操作中的相同的表单,它似乎可以工作,但在这种情况下,我只想呈现带有订单信息的文本,并带有指向“编辑此订单”以返回新操作。
    • 如果您调整视图以访问 order.card_number 等,它也应该可以工作。可能希望在它们进入屏幕时将其中的一些值标出。确认页面上的隐藏表单应该包含新订单页面所做的所有信息。
    • 通过表单的隐藏 div 解决了问题。感谢您让我开始使用 Emfi!
    【解决方案2】:

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

    如果您仍然需要按照自己的方式进行操作,请查看wizardly,它正是为此类用途而设计的。

    【讨论】:

    • 谢谢。看起来ajax可能是要走的路。我得好好研究一下。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      相关资源
      最近更新 更多