我想知道如何建立关系的最佳做法如下。
目前,Spree提供以下模型和协会。
asset.rb
module Spree
class Asset < ActiveRecord::Base
belongs_to :viewable, polymorphic: true, touch: true
acts_as_list scope: :viewable
// ....
end
end
image.rb (也许这是无关紧要的,但是继承自资产模型)
module Spree
class Image < Asset
// .......
end
end
variant.rb
module Spree
class Variant < ActiveRecord::Base
has_and_belongs_to_many :option_values, join_table: :spree_option_values_variants, class_name: "Spree::OptionValue"
has_many :images, -> { order(:position) }, as: :viewable, dependent: :destroy, class_name: "Spree::Image"
// ......
end
end
option_value.rb
module Spree
class OptionValue < ActiveRecord::Base
belongs_to :option_type, :touch => true
acts_as_list scope: :option_type
has_and_belongs_to_many :variants, join_table: 'spree_option_values_variants', class_name: "Spree::Variant"
// ......
end
end
目前,将图像(资产)添加到产品变体时,会将单个数据库行添加到 spree_assets 表中。这是期望的。在spree_assets表中有一个名为可查看的列,它保存变量的id。这不是非常灵活。基本上,这意味着单个图像只能应用于单个变体。目前,Spree Admin也反映了这一点。上传产品图片时,会提供一个选择框以选择要应用此图像的单个变体。对于许多商店来说这可能很好,但对于我们的商店,绿色T恤图像应适用于小型,中型和大型绿色T恤。
提议的解决方案
我在Google Doc中详细介绍了建议的解决方案。
基本上,我认为应该使用新表。此新表格将包含资产, option_value 和变体的外键。这肯定是完全错误的,但这就是我在这里发帖的原因。 :)
我应该创建这个新的db表吗?或者,目前的关系是否符合我的需求?
如果我确实创建了一个新的db表,我是否需要一个连接模型?它应该是什么样的?
对于Stack Overflow来说,这可能太抽象了,如果有的话,我道歉。如果你只是想让我雇用你来实施,请告诉我。
答案 0 :(得分:0)
在admin / products // images页面
您可以为每个变体上传“封面”图像(相同的图像)绿色小,绿色中等和绿色大。您还需要类别页面的“全部”图像
如果您对该产品的所有内容只是绿色,那么只需选择主图像“全部”
在这两种情况下:
确保您在产品所在的分类中的“默认颜色”部分(admin / products_taxons)中选择了一种颜色。
答案 1 :(得分:0)
我最后在这个问题上找到了一些帮助。如果您有兴趣,请在此处查看扩展程序:https://github.com/jpdesigndev/spree_asset_variant_options