2010-03-19 86 views
0

我有一個典型的,Post模型:ruby​​-on-rails:update_attributes重寫模型驗證?

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)有關修復的建議?

感謝

回答

6

從上update_attribute的條目the doc for ActiveRecord::Persistence

更新單個屬性並保存 備案不通過正常 驗證程序去。這是 特別適用於 現有記錄上的布爾標誌。

似乎這是一個漏洞,可以幫助您避免驗證開銷,當您快速調整記錄時。如果你想驗證,只需使用

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

工作。非常感謝 – cbrulak 2010-03-19 03:18:32