2013-06-20 72 views
2

出於某種原因,我需要運行此驗證驗證Rails的模型只是當一些方法被調用

validates_presence_of :user_id 

只是當被調用一些方法

def publish # this method does not save nor update record 
      # so validations are not run 
    ... 
end 

我已經這樣解決了它:

# model 
validates_presence_of :user_id, if: :going_to_publish 
attr_accessor :going_to_publish 

# when calling publish 
post.going_to_publish = true 
post.publish 

有沒有辦法刪除該標誌變量?

回答

1

我在這裏沒有看到任何必要。

如果您發佈帖子,帖子obj必須爲persistent。所以publish方法必須在裏面調用create/save方法。

如果這樣的方法被調用,驗證規則也會被調用。

添加

驗證工程更新以及

創建並保存新的記錄將發送SQL INSERT操作到數據庫。更新現有記錄將發送SQL UPDATE操作。通常在將這些命令發送到數據庫之前運行驗證。如果任何驗證失敗,該對象將被標記爲無效,並且Active Record將不執行INSERT或UPDATE操作。

http://guides.rubyonrails.org/active_record_validations_callbacks.html#when-does-validation-happen

+0

實際發佈方法不更新記錄,我不知道我是怎麼得到這個爛攤子。 – juanpastas

+0

那麼這個方法會做什麼? –

+0

嗯,更好地解釋情況我正在創建'評論'引用來自AJAX的帖子,所以我保存帖子之前,然後我創建指向該帖子的評論。當我發佈帖子時,我會調用'notify_reviewers',並且我想在這種情況下驗證帖子不是第一個。 – juanpastas