2010-10-04 12 views
6

Mam model o nazwie Contact z atrybutem o nazwie phone_number. Mam kilka metod, takich jak zwyczaj setterJak używać atrybutów aktualizacji z metodami ustawiania niestandardowego w Railsach?

def prefix=(num) 
    self.phone_number[3..5] = num 
end 

Kiedy zadzwonić @contact.update_attributes({:prefix => '510'}), nie otrzymuję żadnych błędów i @contact zostanie zmienione, ale zmiany nie mogły przedostać się do bazy danych. Próbowałem użyć attr_accessible, aby wyraźnie zezwolić na używanie tych metod ustawiania bezskutecznie.

Czy istnieje sposób, aby uzyskać dla mnie update_attributes? Używam Rails 2.3.8.

Odpowiedz

13

Musisz poinformować szyn, które zmieniły atrybut, jak radzą sobie w miejsce modyfikacji:

def prefix=(num) 
    phone_number_will_change! 
    self.phone_number[3..5] = num 
end 
+0

Bah! To mnie za każdym razem. Dzięki, Kandada. – muirbot

+0

'numer_telefonu_wymianę!' Nie jest potrzebny, jeśli na końcu metody wywołasz 'super num'. – Hendrik

+0

@Hendrik tutaj staramy się zaktualizować ciąg w miejscu. Więc nie przechodzi przez brudne infra AR. Rzeczywisty atrybut to 'numer_telefonu', ale aktualizujesz prefiks. Nie ma 'super' dla' przedrostka ', ponieważ nie jest to atrybut DB. Zobacz dokumentację AR Dirty: http://api.rubyonrails.org/classes/ActiveModel/Dirty.html –

Powiązane problemy