Przykład o czym mówię:
class Person < ActiveRecord::Base
def name=(name)
super(name.capitalize)
end
def name
super().downcase # not sure why you'd do this; this is just an example
end
end
Wydaje się, że to działa, ale właśnie przeczytałem sekcję dotyczącą zastępowania metod atrybutów w dokumentacji ActiveRecord :: Base i sugeruje użycie metod read_attribute
i write_attribute
. Pomyślałem, że coś musi być nie tak z tym, co robię w powyższym przykładzie; w przeciwnym razie dlaczego mieliby błogosławić te metody jako „właściwą drogę” do zastępowania metod atrybutów? Wymuszają też znacznie brzydszy idiom, więc musi być dobry powód ...
Moje prawdziwe pytanie: czy coś jest nie tak z tym przykładem?
ruby-on-rails
oop
activerecord
Ajedi32
źródło
źródło
Jako rozszerzenie odpowiedzi Aarona Longwella możesz także użyć „notacji mieszającej”, aby uzyskać dostęp do atrybutów, które przesłaniały akcesory i mutatory:
źródło
self.attribute
zdmuchuje stos w wersji 3.2.16.||=
domyślne:def name; self[:name] ||= 'anon'; end
Na ten temat można znaleźć świetne informacje na ten temat adresem http://errtheblog.com/posts/18-accessor-missing .
Krótko mówiąc, ActiveRecord poprawnie obsługuje super wywołania dla akcesorów atrybutów ActiveRecord.
źródło
Mam wtyczkę rails, która sprawia, że nadpisywanie atrybutów działa z super, jak można się spodziewać. Możesz go znaleźć na githubie .
Żeby zainstalować:
Używać:
Kiedy już to zrobisz, wszystko po prostu działa:
źródło