我想添加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
表中的列?
答案 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
表查看Taxons
与spree_product_taxons
的关联方式。
更重要的部分是您是否需要新的Service
课程。您最好将您的服务视为产品。产品在Spree系统中根深蒂固,您正在为自己创建大量工作,尝试实现与其并存的另一个模型。