ruby-on-rails:update_attributes会覆盖模型验证吗?

cbr*_*lak 0 ruby-on-rails update-attributes

我有一个典型的Post模型:

class Post< ActiveRecord::Base
    validates_presence_of :user_id                                   #Line 1
    validates_presence_of :title,:body                               #Line 2
Run Code Online (Sandbox Code Playgroud)

在控制器中,我有:

def create
   if request.post? 
       if login_required
           @post = Post.new(params[:post])                            #Line 3
           @post .update_attribute("user_id",session[:userid])        #Line 4
Run Code Online (Sandbox Code Playgroud)

但是,如果第2行上的验证失败,仍将创建帖子,除非注释掉第4行.

1)为什么?

2)修复建议?

谢谢

Tom*_*Tom 6

从该条目update_attribute的文档ActiveRecord的::持久性:

更新单个属性并保存记录,而无需通过正常的验证过程.这对现有记录上的布尔标志特别有用.

看起来像是一个漏洞,可以帮助您在对记录进行快速调整时避免验证的开销.如果您想要验证,请使用

@post.update_attributes(:user_id => session[:userid])
Run Code Online (Sandbox Code Playgroud)