Załóżmy, że mam ten model o nazwie Produkt z polem o nazwie o nazwie. Załóżmy, że wartości marki są przechowywane w formacie this_is_a_brand. Czy mogę zdefiniować metodę w modelu (lub gdziekolwiek indziej), która pozwala mi zmodyfikować wartość marki, zanim zostanie wywołana. Na przykład, jeśli zadzwonię pod numer @ product.brand, chcę uzyskać . Jest to marka, zamiast this_is_a_brand.Ruby on Rails - Czy mogę zmodyfikować wartość atrybutu przed wywołaniem?
5
A
Odpowiedz
9
Polecam przy użyciu składni kwadratowego nawiasu ([]
i []=
) zamiast read_attribute
i write_attribute
. Składnia nawiasów kwadratowych jest krótsza i designed to wrap the protected read/write_attribute methods.
def brand
original = self[:brand]
transform(original)
end
def brand=(b)
self[:brand] = reverse_transform(b)
end
0
W swoim modelu można zastąpić wywołanie metody brand
.
def brand
#code to modify the value that is stored in brand
return modified_brand
end
Pozwoli to na zapisanie go jako this_is_a_brand. Ale zostanie zwrócony jako "to jest marka".
7
Zamiast dostępu @attributes bezpośrednio, należy użyć read_attribute
i write_attribute
:
def brand
b = read_attribute(:brand)
b && b.transform_in_some_way
end
def brand=(b)
b && b.transform_in_some_way
write_attribute(:brand, b)
end
1
Powiązane problemy
- 1. Introspekcja wartości atrybutu Ruby on Rails
- 2. Ruby on Rails: #any? zwraca nieprawidłową wartość
- 3. Ruby on Rails on IIS?
- 4. Ruby vs. Ruby On Rails
- 5. Przełącznik Ruby on Rails
- 6. Docsplit Ruby on Rails
- 7. Czy warto się nauczyć Ruby On Rails
- 8. Ruby on Rails has_many through obiektów asocjacyjnych przed zapisaniem
- 9. Ruby on Rails I18n interpolation
- 10. Ruby on Rails javascript_include_tag: domyślnie
- 11. Strip html z ciągu Ruby on Rails
- 12. Co powinienem sprawdzić przed uruchomieniem witryny Ruby on Rails?
- 13. Ruby on Rails wysyłania SMS
- 14. Ruby on Rails Private Methods?
- 15. Stowarzyszenie polimorficzne Ruby on Rails
- 16. Ruby on Rails: menu rozwijane
- 17. Ruby on Rails 301 przekierowanie
- 18. Ruby on Rails before_filter vs initialized ruby
- 19. Monit Ruby on Rails Sidekiq
- 20. Konwersja projektu Ruby on Rails do projektu JRuby on Rails
- 21. Narzędzia raportowania Ruby on Rails?
- 22. Ruby on Rails. Unicode routes
- 23. Ruby on Rails jsonb wartości domyślnej kolumny
- 24. Ruby on Rails: Wyszukiwanie zaawansowane
- 25. Antypatterns z Ruby on Rails
- 26. Ruby on Rails coffeescript braku
- 27. Ruby on rails i Node.js
- 28. Ruby on Rails link_to obrazu
- 29. Zwijanie na Ruby on Rails
- 30. Pakiety Ruby on Rails downgrade
próbowałem, ale jak mogę odwołać się do "wewnętrznego" marki? – sker
Ok, rozumiem. Atrybuty są przechowywane w @atrybutach, więc mogę po prostu wywołać @attributes ['brand'] wewnątrz metody. Dzięki za pomoc. – sker