我有一个典型的,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)上的修复连连呢?

由于

有帮助吗?

解决方案

这在该文档ActiveRecord的上update_attribute条目: :持久性的:

  

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

好像它是一个漏洞,以帮助您避免验证的开销,当你做一个匆匆的调整,达到创纪录。如果你想验证,只需要使用

@post.update_attributes(:user_id => session[:userid])
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top