将自定义模型与Spree相关联

时间:2014-11-25 11:55:03

标签: ruby-on-rails spree

我想添加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关联,我应该定义迁移以添加service_id } spree_taxons表中的列?

2 个答案:

答案 0 :(得分:1)

有一个设计问题, Spree 使用模型加入 Taxons 产品,您应该创建它并将其命名为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

我应该指出的另一件事是,如果你需要一些已经由狂欢团队在产品模型上创建的功能,你应该考虑使用他们的,或者至少尝试扩展产品模型。

答案 1 :(得分:0)

您需要新的加入模型,例如ServiceTaxons,而不是向service_id添加Spree::Taxon。如果您通过Products表查看Taxonsspree_product_taxons的关联方式。

更重要的部分是您是否需要新的Service课程。您最好将您的服务视为产品。产品在Spree系统中根深蒂固,您正在为自己创建大量工作,尝试实现与其并存的另一个模型。