【问题标题】:How to clear database columns in Rails如何清除 Rails 中的数据库列
【发布时间】:2014-01-04 07:06:11
【问题描述】:

我有一个Cart

class Cart < ActiveRecord::Base
  belongs_to :user
  has_many :items, :dependent => :destroy
end

结帐时,我想从购物车中删除给定user 的所有items。我怎样才能做到这一点?

结帐控制器如下所示:

  def create
    @order = Order.new(order_params)
    @order.user_id = session[:user_id]
    @cart = Cart.find(session[:cart])

    respond_to do |format|
      if @order.save
        OrderNotifier.received(@order,@cart).deliver
        format.html { redirect_to :controller => :orders, :action => :index }
        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

注意:我不想删除 Cart 并重新创建它,只需将其从项目中清除即可。

【问题讨论】:

    标签: ruby-on-rails ruby database ruby-on-rails-4 shopping-cart


    【解决方案1】:

    您只需清除items关联即可清除项目:

    @cart.items.clear
    

    http://guides.rubyonrails.org/association_basics.html#has-many-association-reference中所述

    【讨论】:

      【解决方案2】:

      我认为您的购物车模型不一定需要与数据库的链接,您可以将所有内容放在会话中。

      您的模型 Cart.rb

      class Cart
         attr_reader :items # and more attributes if necessary
      
         include ActiveModel::Validations
      
         def initialize
             @items = [] # you will store everything in this array
         end
      
         # methods here like add, remove, etc...
      end
      

      您的物品:

      class CartItem
        attr_reader :product # and attributes like quantity to avoid duplicate item in your cart
      
        def initialize(product)
          @product = product
      
        end
      
        # methods here
      end
      

      在您的控制器中:

      class CartController < ApplicationController
      
        def find_or_initialize_cart
          session[:cart] ||= Cart.new
        end
      
      
        def empty
          session[:cart] = nil
        end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多