Rails update_attribute - PullRequest
       14

Rails update_attribute

5 голосов
/ 27 марта 2012

У меня следующая проблема.У меня есть модель с именем пользователя, которая имеет активированный столбец.Я пытаюсь обновить это значение с помощью активированного метода ?, но выдает ошибку: Ошибка проверки: Пароль не может быть пустым, Пароль слишком короткий (минимум 6 символов), что не имеет смысла для меня, потому что я не касаюсьполе пароля!Я просто хочу обновить активированный столбец.Я помещаю сюда код, который я думаю, что это актуально, но если вы думаете, что вам нужно больше, просто спросите :) Большое спасибо заранее!

Модель:

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

email_regex = /\A[\w+\-.]+@[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

1 Ответ

12 голосов
/ 27 марта 2012

Две вещи, во-первых, соглашение ruby ​​состоит в том, чтобы использовать методы предикатов для возврата только true или false и не делать ничего более похожего на обновление записи.Это не вызывает вашей проблемы, но является отклонением от того, что ожидают другие программисты.Во-вторых, вместо вызова update_attributes попробуйте просто вызвать:

update_attribute(:activated, true)

Это должно пропустить остальные обратные вызовы для записи

...