5

テーブルには、数値を値として取る属性が約 10 個あります。属性ごとに、1 ~ 100 の数値が入力に渡されるかどうかを検証したいと考えています。以下のコードを1つのメソッド検証に減らすことができると思いますか?

現在、属性ごとにこれを行っています。

validates_numericality_of :valueone, :less_than_or_equal_to => 100 validates_numericality_of :valuetwo, :less_than_or_equal_to => 100 validates_numericality_of :valuethree, :less_than_or_equal_to => 100

どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

8

定数を使用する必要があると思います。次のようなよりエレガントなコードが生成されます。

class Whatever
  MIN = 1
  MAX = 100

  validates :valueone, :valuetwo, :valuethree, :length => { :within => MIN..MAX }
end

上記と同じ検証ですべての属性を一覧表示できます。

これでうまくいくはずです。=)

于 2012-11-08T23:26:20.470 に答える
5

.eachうまく機能します:

[:valueone, :valuetwo, :valuethree, ...].each do |n|
  validates n, :numericality => { :greater_than => 0, :less_than_or_equal_to => 100 }
end
于 2012-11-08T23:20:55.767 に答える