狂欢商务图像(资产)与多个OptionValues相关联

时间:2013-12-06 23:07:24

标签: ruby-on-rails spree

我想知道如何建立关系的最佳做法如下。

目前,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来说,这可能太抽象了,如果有的话,我道歉。如果你只是想让我雇用你来实施,请告诉我。

2 个答案:

答案 0 :(得分:0)

在admin / products // images页面

您可以为每个变体上传“封面”图像(相同的图像)绿色小,绿色中等和绿色大。您还需要类别页面的“全部”图像

如果您对该产品的所有内容只是绿色,那么只需选择主图像“全部”

在这两种情况下:

确保您在产品所在的分类中的“默认颜色”部分(admin / products_taxons)中选择了一种颜色。

答案 1 :(得分:0)

我最后在这个问题上找到了一些帮助。如果您有兴趣,请在此处查看扩展程序:https://github.com/jpdesigndev/spree_asset_variant_options