2012-10-23 34 views
1

我正在構建一個用於問題管理的簡單Ruby on Rails應用程序。我有一個問題模型如下:如何在對模型執行操作之前對相關模型執行復雜的驗證檢查?

class Problem < ActiveRecord::Base 
    attr_accessible :active, :impact, :incident_number, :issue_description, :root_cause, :user_id, :problem_summary, :incident_priority, :timeline_enabled 
    attr_accessor :enable_timeline 

    validates :problem_summary, :length => { :in => 10..100 } 

    belongs_to :user 
    has_one :timeline 
    has_many :actionitems 

end 

具有的has_many belongs_to的關聯與模型actionitems:

class Actionitem < ActiveRecord::Base 
    attr_accessible :completion_date, :description, :initial_due_date, :notes, :problem_id, :revised_due_date, :status, :user_id 

    belongs_to :problem 
end 

我希望能夠更新的問題記錄,並與一些保存一套有限的驗證(我仍然需要添加這些驗證)。但是,我希望有一個「完成問題調查」按鈕,可以觸發問題控制器上的方法,將問題記錄上的:active屬性設置爲false。我希望能夠在執行此操作之前對問題記錄運行一組不同的驗證,並驗證與此問題記錄相關的所有操作項(如果有)都處於:status「completed」 。

,我有兩個問題:

  1. 如何只在規定動作完成一組特定的驗證嗎?
  2. 如何在對問題執行操作之前驗證相關的Actionitem實例處於「完成」狀態?

這個任務對我來說似乎很複雜。如果你能指點我需要利用的,以便能夠實現這一點,將不勝感激! (我讀取驗證:on =>:保存etc和accepts_nested_attributes_for,但我不知道如何將所有這些放在一起來實現我想要的行爲)。

非常感謝您的幫助!

回答

0

嘗試添加更多的驗證此

validates_length_of :problem_summary, :in => 10..100, :if => :status_active? 

def status_active? 
    self.active == true 
end 

的詳情,請參閱 - validations & validates_length_of

0

ü需要在驗證申請檢查的條件一樣

validate :xyz , length => {:in => 1..12}, :if => , :if => lambda {self.active == true } 

此驗證當活動是真實的纔會運行。同樣你可以檢查

相關問題