2012-03-26 13 views
5

Mam następujący problem. Mam model o nazwie użytkownik, który ma kolumnę o nazwie aktywowane. Próbuję zaktualizować tę wartość z aktywowaną metodą ?, ale daje mi błąd: Walidacja nie powiodła się: Hasło nie może być puste, Hasło jest zbyt krótkie (minimum 6 znaków) Co nie ma sensu dla mnie, ponieważ nie dotykam pole hasła! Chcę tylko zaktualizować aktywowaną kolumnę. Zakładam tutaj kod, który moim zdaniem jest trafny, ale jeśli uważasz, że potrzebujesz więcej tylko zapytaj :) Z góry bardzo dziękuję!Szyny update_attribute

Model:

attr_accessor :password 
attr_accessible :name, :email, :password, :password_confirmation, :activated 
has_many :sucu_votes 

email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

validates :name, :presence => true, 
            :length => { :maximum => 50 } 

validates :email, :presence => true, 
            :format => {:with => email_regex}, 
            :uniqueness => { :case_sensitive => false } 

validates :password, :presence => true, 
             :length => { :within => 6..15 }, 
             :confirmation => true 

before_save :encrypt_password 

def activated? 
    self.update_attributes!(:activated => true) 
    return self.activated 
end 

Kontroler z których aktywna metoda? nazywa

def activate 
if request.get? 
     user=User.find_by_id(params[:id]) 
     if user.activated? 
      flash[:notice]="Your account has been activated" 
      #redirect_to :controller => 'sessions', :action => 'new' 
     else 
      flash[:error]="We couldnt activate the account" 
      redirect_to :controller => 'sessions', :action => 'new' 
     end 
    end 
end 

Odpowiedz

12

dwie rzeczy, pierwsza konwencja rubin jest użycie metody predykatywne wrócić prawdziwe lub fałszywe i nie robić nic więcej jak zaktualizować rekord. To nie powoduje twojego problemu, ale jest odchyleniem od tego, czego oczekiwaliby inni programiści. Po drugie, zamiast dzwonić update_attributes spróbować właśnie dzwoni:

update_attribute(:activated, true)

ten powinien pominąć resztę wywołań zwrotnych dla rekordu

+0

Dziękuję bardzo! Tak naprawdę miałem to wcześniej, ale nie działało z innego powodu. Ale teraz wszystko w porządku :) – gumlym