Czy modyfikowanie modelu Product, poprzez dodanie migracji oraz walidacji (poprzez product_decorator.rb) jest poprawnym rozwiązaniem dodawania dodatkowych atrybutów do modelu Product?
Potrzebuję kilku dodatkowych pól tekstowych (to niby mógłbym załatwić poprzez Properties), z walidacja ich długości (tego już Properties chyba nie potrafią), jak również pola typu datetime, boolean itd (czego też chyba wyklikać się nie da w prototypie produktu w żaden sposób).
Są dwa rozwiązania, zależy co potrzebujesz. Jeżeli jest to kilka dodatkowych pół, najprawdopodobniej chcesz żeby to był osobny model połączony 1:1
wtedy robisz tylko jedną klasę
class ProductExtraField < ActiveRecord::Base;
belongs_to :product
Tu walidacje oczywiście.
end
a w extension ładnie:
Product.has_one :product_extra_field
I masz po sprawie, upewnik się że nested attributes będą banglać, i tworzysz formularze łatwo, prosto i przyjemnie - jako bonus nie rozszerzasz i tak już spuchniętego modelu Product
Generalnie podejście _decorator sprawdza się jeżeli dodajesz głownie metody nie pola w bazie danych.
W jaki sposób utworzyłeś ten produkt? bez pełnego backtrace’a trudno powiedzieć, ale wszystko wskazuje na to że nie ma on master varianta. Co nie jest zupełnie związane z walidacją.
PRzy okazji, nie “podpinaj się” z niepowiązanymi pytaniami pod tematy - chyba że jest to specjalny temat w stylu Q&A. później ciężko się odróżnia odpowiedzi do jednego pytania od drugiego, oraz cięzko się sledzi i wyszukuje tego typu tematy.
Przepraszam za podpięcie, nie chciałem po prostu nowego wątku zakładać. Będę pamiętał na przyszłość.
Produkt dodaje normalnie, przez panel administratora. ( Przycisk New product )
I rzeczywiście nie ma master varianta właśnie przez ten błąd. Jak usunę tą moją walidację to produkt razem z master variantem jest poprawnie tworzony i wszystko jest ok.
No problem. Generalnie nie ma nic złego w zakładaniu nowych wątków o ile nie maja większego związku z istniejącym mają sens i nie są dupikatami. Twój post spełniał wszystkie kryteria.
A co do twojego błedu - należało by sprawdzić jak i kiedy jest zapisywany. Jest to błąd w Spree prawdopodobnie, dosyć łatwy niestety do popełnienia gdy korzysta się ze wzorca ActiveRecord, produkt nie powinien zostać stworzony bez master varianta, a master variant się nie zapisuje bo SKU z forumlarza powinno zostać mu przypisane przed próbą jego zapisu - najwyraźniej się to nie dzieje, musisz sam odkryć dlaczego i to poprawić. Powodzenia!