ステートマシンで検証を正しく機能させる方法がわかりません。IE 公開の新しい状態を許可する前に、特定の検証を行いたい:
トランジション、私が使用しているgemにはガードメソッドがありますが、それを複数の検証に正しく使用する方法がわかりません。
次のような基本的な検証を単純に適用しようとしました:
validate_presence_of :age, :if => :publish? #
https://github.com/qoobaa/transitions
更新: これは私が望むように機能するようですが、次の質問は、すべての検証をまとめてメソッドを簡素化するにはどうすればよいかということです。私は、それを本来よりもはるかに複雑にし、堅牢性を大幅に低下させているように感じます。何か案は?
state_machine do
state :draft
state :active
state :offline
event :publish do
transitions :to => :active, :from => :draft, :on_transition => :do_submit_to_user, :guard => :publish?
end
end
def publish?
unless description.blank? || invalid_minimum_feature_tags || invalid_minimum_images
return true
else
errors.add(:description, 'cannot be blank') if description.blank?
errors.add(:feature_list, 'must contain at least 4 features') if invalid_minimum_feature_tags
errors.add(:photos, 'must exceed 4 to publish') if invalid_minimum_images
return false
end
end
def invalid_minimum_images
if photos.size < 4
return true
else
return false
end
end
def invalid_minimum_feature_tags
if feature_list.size < 4
return true
else
return false
end
end