Rails将模型与创建模型分开保存

时间:2014-02-26 21:12:18

标签: ruby-on-rails ruby-on-rails-3 user-controls

我有一个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

2 个答案:

答案 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