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 関連付けがあります。

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" であることを検証できるようにしたいと考えています。 .

私が持っている2つの質問:

  1. 特定のアクションに対してのみ特定の一連の検証を実行するにはどうすればよいですか?
  2. 問題に対してアクションを実行する前に、Actionitem の関連インスタンスが「完了」ステータスであることを確認するにはどうすればよいですか?

このタスクは私には非常に複雑に思えます。これを達成するために何を利用する必要があるか教えていただければ幸いです。(validates :on => :save などを読み、accepts_nested_attributes_for を読みましたが、これらすべてをまとめて、必要な動作を実現する方法がわかりません)。

ご協力ありがとうございました。

4

2 に答える 2

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 に答える
0

次のような検証にチェック条件を適用する必要があります

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

この検証は、ACTIVE IS TRUE の場合にのみ実行されます。同様に、チェックでさらに検証を追加できます

于 2012-10-23T04:44:59.833 に答える