狂欢关系问题

时间:2015-04-15 23:02:52

标签: ruby-on-rails spree

我试图将产品附件功能添加到Spree商店。例如。 product附有许多documents:小册子,说明手册等。我无法获得文档和产品之间的关系。

我可以使用Paperclip gem作为附件功能,因为Spree已经将它用于图像。

我有"文件"型号:models/spree/document.rb

class Spree::Document < ActiveRecord::Base
  belongs_to :products, class_name: "Spree::Product"
  has_attached_file :pdf
end

然后我尝试将文档模型与Spree::Product中的models/spree/product_decorator.rb模型相关联:

Spree::Product.class_eval do
  has_many :documents, dependent: :destroy
end

然后我添加了迁移:

class CreateDocuments < ActiveRecord::Migration
  def change
    create_table :spree_documents do |t|

      t.timestamps
    end
  end
end

class AddPdfToDocuments < ActiveRecord::Migration
  def self.up
    add_attachment :spree_documents, :pdf
  end

  def self.down
    remove_attachment :spree_documents, :pdf
  end
end

现在我进入rails控制台查看它是否有效:

#=> prod = Spree::Product.first
#=> prod.document
#=> PG::UndefinedColumn: ERROR:  column spree_documents.product_id does not exist
#=> LINE 1: ..."spree_documents".* FROM "spree_documents"  WHERE "spree_doc...
                                                             ^
#=> : SELECT "spree_documents".* FROM "spree_documents"  WHERE "spree_documents"."product_id" = $1

似乎我没有正确定义文档和产品之间的关系,但我不确定问题是什么。

1 个答案:

答案 0 :(得分:2)

您似乎从未在product_id表格中添加Spree::Documents列。当您定义模型belongs_to另一个模型时,它会告诉ActiveRecord第一个模型在其表中是[relation]_id列。

您只需确保在迁移中添加t.references :product,所以它看起来像:

class CreateDocuments < ActiveRecord::Migration
  def change
    create_table :spree_documents do |t|
      t.references :product
      t.timestamps
    end
  end
end