Spree:自定义产品的关键属性

时间:2011-05-03 21:52:50

标签: spree

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

感谢。

2 个答案:

答案 0 :(得分:9)

最简单的方法是通过迁移将属性直接添加到Product模型。可以通过使用装饰器来添加验证,装饰器是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模型。您可以通过产品控制器创建操作中的一些额外逻辑来解决这个问题。

答案 1 :(得分:0)

我为Spree扩展Product model的方法(通过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