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

它与 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。我希望能够在执行此操作之前对问题记录运行一组不同的、更完整的验证,并验证与此问题记录关联的所有操作项(如果有)是否处于:状态“已完成” .

我有两个问题:

  1. 如何仅对给定操作执行一组特定的验证?
  2. 在对问题执行操作之前,如何验证 Actionitem 的相关实例处于“完成”状态?

这个任务对我来说似乎很复杂。如果您能指出我需要利用什么才能实现这一目标,我们将不胜感激!(我阅读了 validates :on => :save 等和 accept_nested_attributes_for 但我不确定如何将所有这些放在一起以实现我想要的行为)。

非常感谢您的帮助!

4

2 回答 2

0

您需要对验证应用检查条件,例如

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

此验证仅在 aCTIVE 为 TRUE 时运行。同样,您可以通过检查添加更多验证

于 2012-10-23T04:44:59.833 回答
0

试试这个

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

def status_active?
  self.active == true  
end

详细查看 -验证& validates_length_of

于 2012-10-23T05:13:03.543 回答