【问题标题】:Rails 4 ActiveModel::MissingAttributeError in OrdersController#createRails 4 ActiveModel::MissingAttributeError 在 OrdersController#create
【发布时间】:2014-01-30 01:20:51
【问题描述】:

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

OrdersController#create 中的 ActiveModel::MissingAttributeError

随着

无法写入未知属性`order_id'

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

respond_to 做 |格式| 如果@order.save Cart.destroy(session[:cart_id]) session[:cart_id] = nil

我似乎无法修复这个错误。

下面是我orders_controller.rb文件中的create方法

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

【问题讨论】:

  • 我们可以看看您的订单型号吗? - 编辑:如迁移和实际模型文件本身(仅相关部分)。
  • class Order
  • 请编辑您的问题。
  • 由于某种原因无法制作代码块
  • 每行代码前四个空格。没有制表符,因此只能缩进更多空格。另外,请包括您的迁移,我希望看到此表上的列。

标签: ruby ruby-on-rails-4


【解决方案1】:

好的,我想我看到了问题所在。您对订单项中的订单的迁移可能没有创建您预期的order_id 列,它可能创建了一个orders 列或其他内容。

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

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

如果不是,请回复此答案。

【讨论】:

  • 嗨 mellowfish87 我添加了 add_column :line_items, :order_id, :reference 它在没有 int 的情况下工作谢谢你的帮助我很感激
猜你喜欢
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多