2014-08-29 2 views
-1

После оформления заказа у нас есть форма для заполнения данными от пользователя, если не заполнять, мы представляем ошибки, после заполнения данных, если мы нажмем «Разместить заказ», то предположим, что это будет обновление базы данных, но все данные исчезают из формы и отображают ошибки, как в первый раз без данных.agile web development 4 с рельсами 4 форма заказа

Вот мой код:

/app/views/carts/_cart.html.erb:

<h2>Your Cart</h2> 
<table> 
    <%= render(cart.line_items) %> 

    <tr class="total_line"> 
    <td colspan="2">Total</td> 
    <td class="total_cell"><%= number_to_currency(cart.total_price) %></td> 
    </tr> 

</table> 

<!-- START_HIGHLIGHT --> 
<%= button_to "Checkout", new_order_path, method: :get %> 
<!-- END_HIGHLIGHT --> 
<%= button_to 'Empty cart', cart, method: :delete, 
    data: { confirm: 'Are you sure?' } %> 

/app/controllers/orders_controller.rb:

class OrdersController < ApplicationController 
    include CurrentCart 
    before_action :set_cart, only: [:new, :create] 
    before_action :set_order, only: [:show, :edit, :update, :destroy] 

    # GET /orders 
    # GET /orders.json 
    def index 
    @orders = Order.all 
    end 

    # GET /orders/1 
    # GET /orders/1.json 
    def show 
    end 

    # GET /orders/new 
    def new 
    if @cart.line_items.empty? 
     redirect_to store_url, notice: "Your cart is empty" 
     return 
    end 

    @order = Order.new 
    end 

    # GET /orders/1/edit 
    def edit 
    end 

    # POST /orders 
    # POST /orders.json 
    def create 
    @order = Order.new(order_params) 
    @order.add_line_items_from_cart(@cart) 

    respond_to do |format| 
     if @order.save 
     Cart.destroy(session[:cart_id]) 
     session[:cart_id] = nil 

     format.html { redirect_to store_url, notice: 
      'Thank you for your order.' } 
     format.json { render action: 'show', status: :created, 
      location: @order } 

     else 
     format.html { render action: 'new' } 
     format.json { render json: @order.errors, 
      status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /orders/1 
    # PATCH/PUT /orders/1.json 
    def update 
    respond_to do |format| 
     if @order.update(order_params) 
     format.html { redirect_to @order, notice: 'Order was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @order.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /orders/1 
    # DELETE /orders/1.json 
    def destroy 
    @order.destroy 
    respond_to do |format| 
     format.html { redirect_to orders_url } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_order 
     @order = Order.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def order_params 
     params.require(:order).permit(:name, :address, :email, :pay_type) 
    end 
    #... 
end 

/Приложение/views/orders/new.html.erb:

<div class="depot_form"> 
    <fieldset> 
    <legend>Please Enter Your Details</legend> 
    <%= render 'form' %> 
    </fieldset> 
</div> 

/app/views/orders/_form.html.erb:

<%= form_for(@order) do |f| %> 
    <% if @order.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@order.errors.count, "error") %> 
     prohibited this order from being saved:</h2> 

     <ul> 
     <% @order.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br> 
<!-- START_HIGHLIGHT --> 
    <%= f.text_field :name, size: 40 %> 
<!-- END_HIGHLIGHT --> 
    </div> 
    <div class="field"> 
    <%= f.label :address %><br> 
<!-- START_HIGHLIGHT --> 
    <%= f.text_area :address, rows: 3, cols: 40 %> 
<!-- END_HIGHLIGHT --> 
    </div> 
    <div class="field"> 
    <%= f.label :email %><br> 
<!-- START_HIGHLIGHT --> 
    <%= f.email_field :email, size: 40 %> 
<!-- END_HIGHLIGHT --> 
    </div> 
    <div class="field"> 
    <%= f.label :pay_type %><br> 
<!-- START_HIGHLIGHT --> 
    <%= f.select :pay_type, Order::PAYMENT_TYPES, 
        prompt: 'Select a payment method' %> 
<!-- END_HIGHLIGHT --> 
    </div> 
    <div class="actions"> 
<!-- START_HIGHLIGHT --> 
    <%= f.submit 'Place Order' %> 
<!-- END_HIGHLIGHT --> 
    </div> 
<% end %> 

/app/models/order.rb:

class Order < ActiveRecord::Base 
    PAYMENT_TYPES = [ "Check", "Credit card", "Purchase order" ] 
    has_many :line_items, dependent: :destroy 
    # ... 
    validates :name, :address, :email, presence: true 
    validates :pay_type, inclusion: PAYMENT_TYPES 
end 

/app/models/line_item.rb:

class LineItem < ActiveRecord::Base 
    belongs_to :order 
    belongs_to :product 
    belongs_to :cart 
    def total_price 
    product.price * quantity 
    end 
end 

ответ

0

Хорошо, она решается, проблема заключается в приложение/модели/order.rb то, что я когда заказы обновления не работают класса Order < ActiveRecord :: Base has_many: line_items , В зависимости:: уничтожить PAYMENT_TYPES = [ "Проверка", "Кредитные карты", "Заказ на поставку"]

подтверждает: имя,: адрес,: электронная почта, присутствие: истинно подтверждает: pay_type, включение: PAYMENT_TYPES четкости add_line_items_from_cart (cart) cart.line_items.each do | item | item.cart_id = нильполугруппы line_items < < пунктом конца конца конца

После изменения с attr_accessible: cart_id,: product_id,: продукт,: имя, адрес:,: электронная почта,: pay_type

класс Заказ < ActiveRecord :: Base attr_accessible: cart_id,: product_id,: product,: name,: address,: email,: pay_type has_many: line_items, depend:: destroy PAYMENT_TYPES = ["Check", "Credit Card", " "Заказ на поставку"]

подтверждает: имя, адрес:,: электронная почта, присутствие: истинно подтверждает: pay_type, включение: PAYMENT_TYPES четкости add_line_items_from_cart (корзина) cart.line_items.each сделать | пункт | item.cart_id = нильполугруппы line_items < < пунктом конца конца конца

Теперь все работает ожидал.

Благодаря

С уважением

Смежные вопросы