【问题标题】:Spree: customize the key attributes of a product大礼包:自定义产品的关键属性
【发布时间】:2011-05-03 21:52:50
【问题描述】:

有谁知道是否可以向产品的一组关键属性(名称、描述、永久链接、元描述等)添加新属性?我的想法是,我希望在创建产品时使用这些属性,而不是之后通过产品属性添加它们。

谢谢。

【问题讨论】:

    标签: spree


    【解决方案1】:

    最简单的方法是通过迁移将属性直接添加到产品模型。可以通过使用装饰器添加验证,这是 Spree 中用于覆盖模型的首选模式。

    # in app/models/product_decorator.rb
    Product.class_eval do
      validates :some_field, :presence => true
    end
    

    另一种选择是为您的扩展字段创建辅助模型。也许是 ProductExtension

    # in app/models/product_extension.rb
    class ProductExtension < ActiveRecord::Base
      belongs_to :product
    
      validates :some_field, :presence => true
    end
    
    # in app/models/product_decorator.rb
    Product.class_eval do
      has_one :product_extension
      accepts_nested_attributes_for :product_extension
      delegate :some_field, :to => :product_extension
    end
    

    然后在您的产品创建表单中,您可以为这些字段提供 fields_for。我认为需要注意的一个问题是,在扩展可用之前,您需要创建已创建的 Product 模型。您可能可以通过产品控制器创建操作中的一些额外逻辑来解决此问题。

    【讨论】:

      【解决方案2】:

      我为 Spree 扩展 Product 模型的方式(通过 delegate_belongs_to):

      #app/models/product_decorator.rb
      Spree::Product.class_eval do
        has_one :product_extension
        accepts_nested_attributes_for :product_extension, :allow_destroy => true
        delegate_belongs_to :product_extension, :some_field
        attr_accessible :some_field
      end
      
      #app/models/product_extension.rb
      class ProductExtension < ActiveRecord::Base
        belongs_to :product, :class_name => 'Spree::Product'
        attr_accessible :some_field
      end
      

      【讨论】:

        猜你喜欢
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多