2015-04-15 2 views
0

Я пытаюсь добавить функциональность приложения в магазин Spree. Например. a product имеет много прилагаемых documents: брошюры, руководства по эксплуатации и т. д. Я не могу заставить отношения между документами и продуктами работать.Spree Relation Issue

Я могу использовать драгоценный камень Paperclip для функциональности вложения, поскольку 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 

Теперь я иду в рельсы con Единственный, чтобы увидеть, если он работал:

#=> 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

Похоже, вы никогда не добавляли столбец 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