0

我有一个典型的 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 行的验证失败,则仍将创建 Post,除非第 4 行被注释掉。

1)为什么?

2)关于修复的建议?

谢谢

4

1 回答 1

6

ActiveRecord::Persistence 文档中update_attribute的条目:

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

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

@post.update_attributes(:user_id => session[:userid])
于 2010-03-19T03:09:58.083 回答