2014-11-25 43 views
1

我想补充Service类别,同样喜欢Spree::Product,对于我定义一些协会,如下与狂欢

class Service < ActiveRecord::Base 
     has_many :images, -> { order(:position) }, as: :viewable, class_name: "Spree::Image", dependent: :destroy 

     has_many :taxons, class_name: "Spree::Taxon", dependent: :destroy 

     validates :name, presence: true, 
        length: { minimum: 5 } 

end 

现在关联定制机型,首先,这是定义这样的分类正确的方法或者我应该使用其他约定来定义Service,并且对于:taxons关联,我应该如何定义迁移以在spree_taxons表中添加service_id列?

回答

0

您需要一个新的加入模型,例如ServiceTaxons而不是将service_id加到Spree::Taxon。如果你看Products如何链接到Taxons它是通过spree_product_taxons表。

更重要的部分是您是否需要新的Service类。只有产品才能让你的服务变得更好。产品深深扎根于Spree系统中,您正在为自己创造大量工作,试图实现与其并存的另一种模型。

1

有设计存在的问题,狂欢使用了一个模型加入分类群产品,你应该创建它,并将它命名services_taxon,迁移应该是这个样子:

class CreateServiceTaxon < ActiveRecord::Migration 
    def change 
    create_table :service_taxon do |t| 
     t.integer :service_id 
     t.integer :taxon_id 
    end 
    end 
end 

而且在服务模型,你应该加上:

class ServiceTaxon < ActiveRecord::Base 
    belongs_to :service, :class_name => 'Service', :foreign_key => 'service_id' 
    belongs_to :taxon, :class_name => 'Spree::Taxon', :foreign_key => 'taxon_id' 
end 

另一件事我要指出的是,如果您甲肾上腺素编辑了产品模型中已经由狂热团队创建的一些功能,您应该考虑使用他们的产品,或者至少尝试扩展产品模型。