2014-02-26 61 views
0

我有一个def show,每次查看它时都会更新我的用户模型。挑战在于我想更新特定属性而不更新所有内容。目前我更新了@user.year@user.today_stepsRails将模型与创建模型分开保存

当我尝试保存@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+\-.][email protected][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 
+1

你的'show'动作是什么样的? – zeantsoi

+0

操作代码将非常有用,因为不清楚在更新记录或保存记录时是否发生错误。 –

+0

@ Mhsmith21 - 除非您提供更多细节,否则我们无法为您提供帮助。 – zeantsoi

回答

2

可选参数可被传递给保存方法,这个参数允许你绕过验证并保存你的对象。你想绕过所有验证并保存你的对象吗?

如果是:

@user.save(validate: false) 

注意,验证不会执行此操作才会发生。 (我想这是你想要的)

+0

这对一个被改变的变量(一个int)有效,但是销毁了.year数组(将它从'[]'改变为'0')任何想法为什么会这样? – Marcus

+0

我不认为它与验证有关。你可以检查你的数据库字段是否是一个字符串,也许你犯了一个错误,你在那里放了一个整数......这是我能想到的唯一的东西。检查你的db/schema.rb文件并告诉我用户表的年份字段是什么类型。 – Oxynum

+1

@Oxynum我不建议你跳过你的验证,这可能会在稍后变成问题。只更新你想要的属性更安全 –