Вы можете проверить атрибут вручную и использовать update_attribute
, что пропускает проверку .Если вы добавите это к вашему User
:
def self.valid_attribute?(attr, value)
mock = self.new(attr => value)
if mock.valid?
true
else
!mock.errors.has_key?(attr)
end
end
, а затем обновите атрибут таким образом:
if(!User.valid_attribute?('avatar', params[:user][:avatar])
# Complain or whatever.
end
@user.update_attribute('avatar', params[:user][:avatar])
Вы должны обновить свой единственный атрибут, пока только(вручную) проверка этого атрибута.
Если вы посмотрите, как работает valid_attribute?
Milan Novota, вы увидите, что он выполняет проверки, а затем проверяет, есть ли у конкретных attr
проблемы;не имеет значения, провалилась ли какая-либо из других проверок, так как valid_attribute?
рассматривает только ошибки проверки для интересующего вас атрибута.
Если вы собираетесь делать много из этогоЗатем вы можете добавить метод для пользователя:
def update_just_this_one(attr, value)
raise "Bad #{attr}" if(!User.valid_attribute?(attr, value))
self.update_attribute(attr, value)
end
и использовать его для обновления вашего единственного атрибута.