Blokowanie rekordu (coś jakby)

Mam system, w którym tworzę różne rzeczy i mam do nich przypisany “numer projektu”. Są to rzeczy typu: węzeł sieci, linia przewodowa itp. Do danych dobieram się przez www lub przez rake task.
Jeden z projektów mi się zakończył i chciałbym “zamrozić” wszystkie rekordy, które mają odpowiedni numer projektu. Chciałbym zrobic tak, aby nie dało się zrobić update żadnego z tych rekordów. Fajnie by było też aby próba nie zwracała żadnego błędu - po prostu ma się nie uaktualnić i już.
Jak się do tego zabrać? Na poziomie modelu czy może nadpisywać coś z ActiveRecord?
Musiałbym blokować rekordy, w których się ustawi odpowiedni numer projektu - czyli dodanie do zbioru. Rekordy, którym się zmieni numer projektu - zabranie ze zbioru i rekordy, w których zmienia się cokolwiek innego.

Chyba zalezy, przed kim chcesz te rekordy ‘zamrozic’

  • jesli tylko przed aplikacja railsowa / taskami rake / kodem, ktory laczy sie z baza przez ActiveRecord, wtedy callback (before_save)
  • jesli przed kazdym innym dostepem (z konsola psql/mysql wlacznie), to mozesz napisac triggera ON BEFORE UPDATE zwracajacego NULL, jesli modyfikowany rekord nalezy do projektu X

Trigger jest ‘najmocniejszy’ - ale wtedy np. jesli jednak bedziesz chcial rekord updatowac (jednorazowo), to trzeba go tymczasowo wylaczyc.

Ok, dzięki. Callback before_save brzmi rozsądnie. Właśnie tak sobie myślałem, że jak coś jednak będę musiał zmienić to właśnie z psql’a zmienię.