我有一个典型的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)关于修复的建议?
由于
答案 0 :(得分:6)
来自the doc for ActiveRecord::Persistence中update_attribute
的条目:
更新单个属性并保存 记录没有通过 正常的验证程序。这是 特别适用于布尔标志 现有记录。
看起来像是一个漏洞,可以帮助您避免在对记录进行快速调整时验证的开销。如果您想要验证,只需使用
@post.update_attributes(:user_id => session[:userid])