2011-05-03 55 views
6

有谁知道是否有可能向产品的关键属性集合(名称,描述,固定链接,元描述等)添加新属性?我的想法是,我希望在创建产品时使用这些属性,而不是通过产品属性添加它们。Spree:自定义产品的关键属性

谢谢。

回答

9

最简单的方法是通过迁移将属性直接添加到产品模型。验证可以通过使用装饰器添加,这是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。我认为有一点需要注意的是,在扩展变得可用之前,您需要创建产品模型。您可以在产品控制器创建操作时使用一些额外的逻辑解决此问题。

0

我的方式来延长狂欢产品型号(通过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