有谁知道是否可以向产品的一组关键属性(名称、描述、永久链接、元描述等)添加新属性?这个想法是我希望在创建产品时使用这些属性,而不是之后通过产品属性添加它们。
谢谢。
最简单的方法是通过迁移将属性直接添加到 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。我认为需要注意的一个问题是,您需要在扩展可用之前创建产品模型。您可能可以通过产品控制器创建操作中的一些额外逻辑来解决这个问题。
我为 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