2012-03-26 9 views
5

Aşağıdaki sorunu yaşıyorum. Etkinleştirilmiş bir sütun içeren bir kullanıcı isimli modelim var. Metodu aktive ettiğinde bu değeri güncellemeye çalışıyorum, ama bana hata veriyor: Doğrulama başarısız: Şifre boş bırakılamaz, Şifre çok kısa (minimum 6 karakter) Benim için mantıklı değil, çünkü dokunmuyorum şifre alanı! Sadece aktifleştirilmiş sütunu güncellemek istiyorum. Buraya koyacağım kodun ilgili olduğunu düşünüyorum, ama daha fazlasına ihtiyacınız olduğunu düşünüyorsanız sadece sor :) Şimdiden çok teşekkür ederim!Raylar update_attribute

Modeli: yöntem aktif olan

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 

Kontrol? İlk yakut kongre değil, yalnızca daha bir kaydı güncelleştirmek gibi bir şey yapmak için doğru ya da yanlış dönmek için yüklem yöntemleri kullanmaktır,

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 

cevap

12

iki şey denir. Bu sizin sorununuza neden olmaz ama diğer programcıların bekleyeceği bir sapmadır. İkincisi, yerine update_attributes çağıran çağırmadan hemen deneyin:

update_attribute(:activated, true)

Bu

+0

Çok teşekkür ederim kayıt için geri aramaları atlayın olmalı! Aslında daha önce böyle yapmıştım, ama başka bir nedenden dolayı çalışmıyordu. Ama hepsi şimdi tamam :) – gumlym