Вопрос

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

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

Спасибо!

Кэндзи

Это было полезно?

Решение

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

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

Добавьте опцию URL-адреса форма_для.Такой , что

<% 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 к действию "создать".

Другие советы

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

Если вам все еще нужно сделать это по-своему, проверьте волшебный, он как раз и создан для такого использования.

Я хотел бы обновить ответ для более элегантной версии Rails 4 или выше.Надеюсь, это поможет таким новичкам, как я.Руби потрясающий!:)

маршруты.рб

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| %>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top