我有一个def show
,每次查看时都会更新我的用户模型。挑战在于我想更新特定属性而不更新所有内容。目前,我更新了@user.year
和@user.today_steps
当我尝试使用@user.save
保存时,会发生错误。
p @user.errors.full_messages
返回["Password is too short (minimum is 6 characters)"]
,但我不是要更新密码。如何在不更新所有属性的情况下保存和更新某些属性?这是一个挑战的原因是因为我的模型需要验证一些属性。
class User < ActiveRecord::Base
# attr email, name, points
before_save { self.email = email.downcase }
before_create :create_remember_token
attr_accessible :email, :name, :password, :password_confirmation, :year, :today_steps
has_many :competitions, dependent: :destroy
has_many :attendees, :dependent => :destroy
has_many :competitions, :through => :attendees
has_one :device
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
serialize :year, Array
答案 0 :(得分:2)
可以将可选参数传递给save方法,此参数允许您绕过验证并保存对象。您想绕过所有验证并保存您的对象吗?
如果是:
@user.save(validate: false)
请注意,仅对此操作不会进行验证。 (我想这就是你想要的)
答案 1 :(得分:0)
使用update_attributes
@ user.update_attributes(:today_steps =&gt;“asdf”,:year =&gt;“2012”)
http://apidock.com/rails/v3.2.13/ActiveRecord/Persistence/update_attributes