4

検証コードを枯渇させるにはどうすればよいですか?Discussionaacategorystatusfieldsを持つモデルがあります。ステータス値はカテゴリ値によって異なります。たとえば、でcategory == 'question'のみステータスを持つことができるディスカッション。STATUSES[:question]

  STATUSES   = {
    question:   %w[answered],
    suggestion: %w[pending planned started completed declined],
    problem:    %w[started solved]
  }
  validates :status, allow_blank: true, inclusion: { in: STATUSES[:question] },   if: lambda { self.category == 'question' }
  validates :status, allow_blank: true, inclusion: { in: STATUSES[:suggestion] }, if: lambda { self.category == 'suggestion' }
  validates :status, allow_blank: true, inclusion: { in: STATUSES[:problem] },    if: lambda { self.category == 'problem' }

Rails3を使用しています。

4

1 に答える 1

5

:inclusion :inラムダ自体を受け入れます:

validates :status, inclusion: { in: lambda { |o| STATUSES[o.category.to_sym] } }

ドキュメント:http ://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_inclusion_of

于 2012-10-26T16:54:28.610 に答える