我正在构建一个简单的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
与actionitems的模型有一个has_many belongs_to关联:
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” 。
我有两个问题:
这项任务对我来说似乎非常复杂。如果你能指出我需要利用的东西,以便能够实现这一点,将不胜感激! (我读过验证:on =&gt;:save etc和accepts_nested_attributes_for但我不知道如何将所有这些放在一起以实现我想要的行为。)
非常感谢你的帮助!
答案 0 :(得分:0)
你需要在验证上应用检查条件,比如
validate :xyz , length => {:in => 1..12}, :if => , :if => lambda {self.active == true }
此验证仅在aCTIVE为TRUE时运行。同样,您可以通过检查添加更多验证
答案 1 :(得分:0)
试试这个
validates_length_of :problem_summary, :in => 10..100, :if => :status_active?
def status_active?
self.active == true
end
详细了解 - validations&amp; validates_length_of