OrdersController中的Rails 4 ActiveModel :: MissingAttributeError #create

时间:2014-01-30 01:20:51

标签: ruby ruby-on-rails-4

我正在尝试为网站构建购物车。我推车工作,所以你可以添加到购物车。我遇到的问题是当我尝试检查购物车中的商品并尝试提交订单时。我收到以下错误:

  

OrdersController中的ActiveModel :: MissingAttributeError #create

一起
  

无法写入未知属性`order_id'

问题是在orders_controller.rb文件中突出显示这段代码

  

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

我似乎无法解决此错误。

以下是我的orders_controller.rb文件

中的创建方法
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

我的迁移文件

class AddOrderToLineItem < ActiveRecord::Migration
  def change
    add_column :line_items, :order, :reference
  end
end

我的order.rb模型

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

  def add_line_items_from_cart(cart)
      cart.line_items.each do |item|
      item.cart_id = nil
      line_items << item
    end
  end 
end

migration order table
class CreateOrders < ActiveRecord::Migration
  def change
    create_table :orders do |t|
      t.string :name
      t.text :address
      t.string :email
      t.string :pay_type

      t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:3)

好的,我想我看到了问题。您对订单项订单的迁移可能无法创建您期望的order_id列,它可能会创建orders列或其他内容。

验证数据库中是否存在这种情况。如果是这样,请撤消之前的迁移并尝试此操作:

class AddOrderToLineItem < ActiveRecord::Migration
  def change
    add_column :line_items, :order_id, :int
  end
end

如果没有,请回答此答案。