2012-03-26 8 views
5

Iveには次の問題があります。私は活性化された列を持つユーザーと呼ばれるモデルを持っています。私はそのメソッドを有効にしてその値を更新しようとしていますが、それは私にエラーを与えます:検証は失敗しました:パスワードは空白ではない、パスワードは短すぎます(最小は6文字です)パスワードフィールド!私は活性化された列を更新したいだけです。私はそれが関連していると思うコードをここに入れているが、あなたはもっと質問する必要があると思うならば:) あらかじめありがとう!Rails update_attribute

モデル:メソッドが起動し、そこから

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 

コントローラ?

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 

答えて

12

二つのことを呼ばれ、最初のルビー規則は、より多くのレコードを更新するような何かをするだけではなく、trueまたはfalseを返すために、述語のメソッドを使用することです。それはあなたの問題の原因ではありませんが、他のプログラマーが期待するものからの逸脱です。第二に、代わりにupdate_attributesを呼び出すだけ呼び出してみてください。

update_attribute(:activated, true)

これは、レコード

+0

のためのコールバックの残りの部分をスキップする必要がありますありがとうございました!私は実際にそれが前にそれを持っていたが、別の理由で働いていなかった。しかし、そのすべての今ok :) – gumlym

関連する問題