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