我正在为问题管理构建一个简单的 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。我希望能够在执行此操作之前对问题记录运行一组不同的、更完整的验证,并验证与此问题记录关联的所有操作项(如果有)是否处于:状态“已完成” .
我有两个问题:
- 如何仅对给定操作执行一组特定的验证?
- 在对问题执行操作之前,如何验证 Actionitem 的相关实例处于“完成”状态?
这个任务对我来说似乎很复杂。如果您能指出我需要利用什么才能实现这一目标,我们将不胜感激!(我阅读了 validates :on => :save 等和 accept_nested_attributes_for 但我不确定如何将所有这些放在一起以实现我想要的行为)。
非常感谢您的帮助!