0
:inclusion => {:in => r = (1..15), :min => r.first, :max => r.last}

これは私が持っている動作中のコードです。私がダイナミックにしたかったのは「15」の部分です。

:inclusion => {:in => r =(1..Vehicle.max_passengers)、:min => r.first、:max => r.last}

次のクラスメソッドを定義しました。

def self.max_passengers
   15
end  

もちろん、それは機能しませんでした。Procsとラムダを使用してみましたが、正しく機能しませんでした。:(誰かがこれで私を助けることができます-それは可能ですか?

4

3 に答える 3

3

カスタム検証方法を探しています:

ActiveRecord::Base.class_eval do
  def self.validates_max_passenger(attr_name, r)
    validates attr_name, :inclusion => { :in => r, :min => r.first, :max => r.last } }
  end
end

# later in your class of choice:      
validates_max_passenger :passengers, 1..5

または、ラムダで次のことを試すことができます

def self.max_passengers
   1..15
end  


validates :attrib, :inclusion => {:in => lambda { |obj| ClassName.max_passengers } }

:in範囲内で使用している場合は、最小/最大は必要ないことに注意してください。

于 2013-01-14T11:29:08.293 に答える
0

役立つかどうかvalidates_withを確認します。このヘルパーは、検証のためにレコードを別のクラスに渡します。このクラスでは、構成を読み取るなどして、検証基準を動的にすることができます。詳細についてvalidates_withは、rubyonrailsガイドを参照してください。

class Person < ActiveRecord::Base
  validates_with GoodnessValidator
end

class GoodnessValidator < ActiveModel::Validator
  def validate(record)
     # implement your dynamic criteria here                 
  end
end
于 2013-01-14T11:22:44.370 に答える
0

これを試して:

inclusion: { in: proc { 1..Vehicle.max_passengers } }
于 2017-03-18T15:53:11.773 に答える