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

时间:2010-03-19 02:58:16

标签: ruby-on-rails update-attributes

我有一个典型的Post模型:

class Post< ActiveRecord::Base
    validates_presence_of :user_id                                   #Line 1
    validates_presence_of :title,:body                               #Line 2

在控制器中,我有:

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

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

1)为什么?

2)关于修复的建议?

由于

1 个答案:

答案 0 :(得分:6)

来自the doc for ActiveRecord::Persistenceupdate_attribute的条目:

  

更新单个属性并保存   记录没有通过   正常的验证程序。这是   特别适用于布尔标志   现有记录。

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

@post.update_attributes(:user_id => session[:userid])