Страница подтверждения заказа в рельсах - PullRequest
4 голосов
/ 14 декабря 2009

Я пытался создать страницу подтверждения заказа для моего приложения 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>

Что я должен сделать, чтобы направить пользователя на страницу подтверждения, на которой отображаются все детали заказа?

Спасибо!

Kenji

Ответы [ 3 ]

10 голосов
/ 15 декабря 2009

На это было несколько ответов вопрос, который заставил меня на полпути, но проблема заключалась в том, что я не был совершенно уверен, как настроить форму в рельсы видят так, чтобы это заняло пользователь на страницу подтверждения с все их детали вместо создания действие.

Направить форму на нестандартную страницу довольно просто.

Добавить параметр 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 в действие create.

2 голосов
/ 14 декабря 2009

Почему бы вам не потянуть подтверждение, например, через ajax, потянуть результат и поместить его в качестве наложенного div, после подтверждения отправьте исходные значения в форме.

Если вам все еще нужно сделать это по-своему, отметьте wizardly , он точно предназначен для таких целей.

0 голосов
/ 11 мая 2017

Я хотел бы обновить ответ для более элегантного 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| %>
...