2009-10-09 10 views

Odpowiedz

45

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 
+0

To jest poprawna odpowiedź na twoje pytanie, ale "poprawne" rozwiązanie twojego aktualnego problemu jest nieco inne ... zobacz komentarz do drugiego pytania. – averell

+0

W przeciwnym razie udziel odpowiedzi +1. – averell

2

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?

+1

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

+8

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

+2

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

Powiązane problemy