Mam tabelę bazy danych z pewnym polem, którego aktualizacja nie powinna być możliwa po dodaniu do bazy danych. Jak mogę powiedzieć mojemu modelowi, że nie powinien on zezwalać na aktualizację określonego pola?Jak zrobić pole bazy danych tylko do odczytu w Railsach?
Odpowiedz
Chcesz użyć attr_readonly
:
Atrybuty wymienione jako tylko do odczytu zostaną wykorzystane do stworzenia nowego rekordu ale operacje aktualizacyjne zignoruje te pola.
class Customer < ActiveRecord::Base
attr_readonly :your_field_name
end
I to pole jest zawsze iz definicji „poprawny” (tj dokładnym odzwierciedleniem rzeczywistości) w momencie włożenia?
Żaden użytkownik nigdy nie pomylił się przy wpisywaniu tego pola przez pierwszy (i w swoim schemacie: tylko) czas?
W rzeczywistości użytkownik nie wprowadza go wcale, jest on ustawiony przez kontroler. To, co chcę zapobiec, to to, że ktoś je modyfikuje za pomocą zmienionych post-request. – fresskoma
W tym przypadku nie chcesz w ogóle robić bałaganu z polami "tylko do odczytu". To, co chcesz zrobić, to użyć instrukcji 'attr_protected' w swoim modelu, aby zapobiec zmianie pola przez aktualizacje masowe. Jeszcze lepiej: użyj 'attr_accessible', aby udostępnić tylko wybrane pola dla aktualizacji masowych. – averell
Do fajki tutaj: Myślę, że właściwy przypadek użycia attr_readonly jest, gdy zmiana tego pola złamie integralność danych. Mam pole: valid_at, a zmiana tego pola nigdy nie powinna się zdarzyć, ponieważ oznaczałoby to, że coś jest nie tak z rdzennymi algorytmami. Jeśli tak się stanie, to wszystkie ręce na pokładzie. Wszystkie dane mogą być złe. Dlatego nigdy nie powinienem go zmieniać i wolałbym raczej mocno bronić się przed zmianą przez błąd w innym kodzie. Jeśli kiedykolwiek zostanie zmieniona, chcę bardzo głośno wysadzić. – Houen
- 1. Kotlin - Jak zrobić pole tylko do odczytu dla klas zewnętrznych
- 2. Koherentny widok tylko do odczytu bazy danych
- 3. Jak zrobić pole wymagane w Railsach?
- 4. Pole tylko do odczytu w formularzu Django
- 5. Otwieranie bazy danych tylko do odczytu bezpośrednio w folderze zasobów
- 6. Oznaczyć pole "Tylko do odczytu" za pomocą Adnotacji danych
- 7. Jak utworzyć pole "tylko do odczytu" w Sitecore?
- 8. Django unittest testowe tylko do odczytu bazy danych
- 9. SQLite próbuje zapisać błąd tylko do odczytu bazy danych
- 10. Jak utworzyć pole tylko do odczytu w widoku
- 11. Jak dodać kilka kolumn do bazy danych w Railsach
- 12. SAPUI5: jak sprawić, by wybrać pole tylko do odczytu
- 13. Jak wyczyścić pole tekstowe wyboru daty jQuery tylko do odczytu?
- 14. Kanał "tylko do odczytu" tylko do odczytu
- 15. Jak zmienić pole w bazie danych serwera SQL ustawionej na "Komórka tylko do odczytu"?
- 16. Oracle - Jak utworzyć użytkownika tylko do odczytu?
- 17. Pole tekstowe tylko do odczytu w Flask-Admin ModelView
- 18. Pole tekstowe tylko do odczytu w języku C#
- 19. SQLite/PHP tylko do odczytu?
- 20. Jak słownika tylko do odczytu w Pythonie
- 21. Jak otworzyć bazę danych SQL Compact tylko do odczytu
- 22. Prawa dostępu tylko do odczytu CouchDB
- 23. Zapisywanie wszystkich zapytań SQL do bazy danych w Railsach
- 24. Mapowanie bazy danych tylko do odczytu z relacją wiele do wielu bez tabeli łączenia
- 25. Właściwości tylko do odczytu
- 26. Jak zrobić pole wprowadzania akceptować tylko litery w javaScript?
- 27. Jak mogę zrobić coś takiego jak find_in_batches_by_sql w Railsach
- 28. Jak wyłączyć sprawdzanie jquery w polach tylko do odczytu?
- 29. Jak DropdownList tylko do odczytu w C#
- 30. Jak znaleźć logi migracji bazy danych na Railsach?
To jest poprawna odpowiedź na twoje pytanie, ale "poprawne" rozwiązanie twojego aktualnego problemu jest nieco inne ... zobacz komentarz do drugiego pytania. – averell
W przeciwnym razie udziel odpowiedzi +1. – averell