2011-05-03 18 views
6

Ürünün anahtar özellik kümesine (Name, Description, Permalink, Meta Description vb.) Yeni bir özellik eklenmesi mümkün olup olmadığını bilen var mı? Buradaki fikir, daha sonra Ürün Özellikleri aracılığıyla bunları eklemek yerine bir ürün oluşturduğumda bu özelliklerin kullanılabilir olmasını sağlamaktır.Spree: Bir ürünün anahtar niteliklerini özelleştirin

Teşekkürler.

cevap

9

En basit yol, geçişler yoluyla doğrudan Ürün modeline özellik eklemek olabilir. Doğrulayıcı modeller için Spree içerisinde tercih edilen model, dekoratörlerin kullanımıyla doğrulamalar eklenebilir.

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

Genişletilmiş alanlarınız için ikincil bir model oluşturmak başka bir seçenektir. Belki de 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 

Daha sonra ürün oluşturma formlarınızda bu alanları bir fields_for ile sağlayabilirsiniz. Bununla ilgili bir uyarının, uzantı kullanıma girmeden önce oluşturulan Ürün modeline sahip olmanız gerekecek. Ürün kontrol cihazlarında bazı ekstra mantıklarla harekete geçebilirsiniz.

0

(delegate_belongs_to üzerinden) Spree Ürün modeli genişletmek için Benim yöntemim:

#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 
İlgili konular