Ustawienie STI oznacza, że będziesz mieć 2 różne formularze dla każdej klasy dziecka. Oznacza to, że pola będą dostępne w formularzu odpowiednio dla Event
i dla Discount
, więc jeśli zapiszesz rekord Discount
, drugie pole image_file będzie domyślnie miało wartość nil
(jeśli nie zmieniłeś go na coś innego) .
Teraz wszystkie atrybuty klasy Promo
rzeczywistości są metody, które można przesłonić, więc jeśli w Discount
zrobisz:
def additional_image_filename #name of the attribute
nil
end
będzie zawsze zwraca zero w wyniku bez względu na to, co zostało zapisane tam . Przykładem w konsoli opartej na moim app, gdzie zastąpi atrybut name
(nie, że muszę, po prostu pokazując):
2.1.5 :028 > Recipe.last
Recipe Load (0.2ms) SELECT "recipes".* FROM "recipes" ORDER BY "recipes"."id" DESC LIMIT 1
=> #<Recipe id: 4, name: "Potatoes Au Gratin", instructions: nil, created_at: "2014-12-04 12:54:26", updated_at: "2014-12-04 12:54:26">
2.1.5 :029 > Recipe.last.name
Recipe Load (0.4ms) SELECT "recipes".* FROM "recipes" ORDER BY "recipes"."id" DESC LIMIT 1
=> nil
jak widać nie jest to nazwa w bazie danych i ma wartość, ale zwraca nil
ponieważ został on przesłonięty.
Możesz również dodać sprawdzanie poprawności dla oddzielnych klas lub wywołań zwrotnych, które pozwolą oczyścić atrybuty, których nie potrzebujesz, tak zwane additional_image_filename
, ale nie rozumiem, dlaczego tego potrzebujesz. w każdym formularzu będziesz miał osobnych kontrolerów i akcje, dlatego też będą różne permitted_params
, które pozwolą Ci wybrać, które pola powinny być tylko zapisane.
W skrócie:
- Nie obejmują
additional_image_filename
w formie do Rabat
- Nie zawierają
additional_image_filename
w peritted_params
w akcji kontrolera do dyskonta
- Ustaw wartość jako zero w db lub przesłonić metoda w klasie
Discount
, jak opisano powyżej.
Myślę, że nie jest możliwe, że klasa dzieci nie wie o klasie rodzicielskiej, ale możesz napisać walidację w klasach dla dzieci – rderoldan1
@ rderoldan1 Może nie rozumiem, ale nie wiem. t chce, aby klasa "Discount" wiedziała o swoim rodzeństwie ('Event')' image_filename' atrybut – kubasub
tak, ale w twojej tablicy promocyjnej masz kolumnę 'image_filename', atrybut w rzeczywistości jest własnością Promo, inne rzeczy są gdzie używasz go – rderoldan1