Chcę dodać do istniejącego modelu niektóre atrybuty, które nie muszą być utrwalone, a nawet zmapowane do kolumny bazy danych. Czy istnieje rozwiązanie, aby określić takie rzeczy?Nietrwałe atrybuty modelu ActiveRecord
Odpowiedz
Oczywiście użyj dobrego starego rubinu o nazwie attr_accessor
. W modelu:
attr_accessor :foo, :bar
Będziesz mógł robić:
object.foo = 'baz'
object.foo #=> 'baz'
Jak zdobyć ten atrybut w formacie JSON obiektu? Powiedzmy, chcę, aby ten atrybut pojawił się w JSON obiektu po stronie klienta. Czy to dostanę? od tej chwili nie otrzymuję tego, mimo że ustawiłem to w mojej metodzie tworzenia. Jak to zrobić? – Yash
A w Railsach 4? – monteirobrena
@monteirobrena samo – apneadiving
miałem ten sam problem, ale ja potrzebowałem bootstrap modelu, więc atrybut musiał utrzymywać się po to_json nazwano . Musisz zrobić jedną dodatkową rzecz.
Jak stwierdził apneadiving, najprostszym sposobem na rozpoczęcie jest, aby przejść do danego modelu i dodać:
attr_accessor :foo
Następnie można przypisać atrybuty. Aby jednak atrybut się przykleił, musisz zmienić metodę atrybutów. W pliku modelu dodaj tę metodę:
def attributes
super.merge('foo' => self.foo)
end
W moim przypadku chciałem użyć lewego sprzężenia do wypełnienia niestandardowego atrybutu. Działa, jeśli nie dodaję niczego, ale chcę też móc ustawić atrybut na nowym obiekcie i oczywiście go nie ma. Jeśli dodaję attr_accessor
, zawsze po nil
po select
następuje powrót. Oto podejście, w którym znalazłem podejście do ustawiania nowego obiektu i pobierania z lewego sprzężenia.
after_initialize do
self.foo = nil unless @attributes.key?("foo")
end
def foo
@attributes["foo"]
end
def foo=(value)
@attributes["foo"] = value
end
Nie działa już w Railsach 4.2. '@ attributes' jest teraz' ActiveRecord :: AttributeSet', który obsługuje '[]' ale nie '[] ='. – davogones
W przypadku gdy ktoś zastanawia się, jak czynią to na widoku, użyj argumentów metoda metody renderowania, tak:
render json: {results: results}, methods: [:my_attribute]
Należy wiedzieć, że to działa tylko wtedy, gdy ustawienie attr_accessor na modelu i ustaw atrybut w akcji kontrolera, tak jak wyjaśniono wybraną odpowiedź.
- 1. Laravel Wymowne atrybuty modelu
- 2. Uzyskiwanie określonych atrybutów z modelu ActiveRecord
- 3. Włączanie ActiveRecord :: Relacja do modelu
- 4. Generowanie modelu ze stowarzyszeniami ActiveRecord
- 5. Uzyskaj atrybuty modelu w backbone.js
- 6. Odzyskujesz wszystkie atrybuty asocjacji modelu AR?
- 7. Ruby on Rails - zagnieżdżonych atrybuty: Jak mogę uzyskać dostęp do modelu nadrzędnego od modelu dziecięcej
- 8. Got ActiveRecord :: AssociationTypeMismatch na modelu zapisu
- 9. Wpisz rzutowany atrybut wirtualny modelu ActiveRecord
- 10. Szyny - Dodaj atrybuty nie w modelu i atrybut modelu aktualizacji
- 11. Kiedy chcielibyśmy uzyskać nietrwałe preferencje?
- 12. Jak odkryć atrybuty modelu w Railsach
- 13. Jak wybrać tylko określone atrybuty z modelu?
- 14. Jak wyświetlić właściwości nietrwałe przy użyciu usługi danych WCF?
- 15. Wirtualne atrybuty i przypisanie masy
- 16. Trwałe vs nietrwałe - Którą powinienem użyć?
- 17. Nieograniczone dowolne właściwości (pary klucz/wartość) dla modelu ActiveRecord
- 18. wiedzieć, co zdarzenie wywołało after_commit danego modelu ActiveRecord
- 19. Szyny: utrzymywanie DRY z modelami ActiveRecord, które mają podobne atrybuty złożone
- 20. Jak aktualizować atrybuty w metodzie instancji w modelu szyn bez używania różnych nazw zmiennych?
- 21. Ograniczenie kolumn reprezentowanych w ActiveRecord
- 22. Internacjonalizacja Django dla stron administracyjnych - przetłumacz nazwy modelu i atrybuty
- 23. Jak pominąć oddzwonienia ActiveRecord?
- 24. Włączając wirtualne atrybuty modelu podczas konwertowania rekordu do JSON w Railsach
- 25. mass_assignment_authorizer i zagnieżdżonych atrybuty
- 26. ActiveRecord: Czy mogę skopiować skojarzenia?
- 27. Yii niestandardowe błędy modelu
- 28. Zależne atrybuty w fabryce Dziewczyna
- 29. activerecord znaleźć przez asocjację
- 30. Efficient ActiveRecord has_and_belongs_to_many query
Prawdopodobny duplikat [Dodawanie dodatkowych atrybutów czasu pracy do obiektu activerecord] (http://stackoverflow.com/questions/7584592/adding-extra-run-time-attribs-to-an-activerecord-object) – mlt