0

デフォルトの検証と、デフォルトの検証をオーバーライドできるサブクラスを備えたスーパークラスが必要です。

class Foo < ActiveRecord::Base
  FIELDS = [:field1, :field2]
  after_initialize :include_rules

  def include_rules
    FIELDS.each do |field|
      self.class.send(:validates, field, presence: true)
    end 
  end
end

スーパークラスから継承されるサブクラスを無視しています...

フォームが送信されるたびに after_initialize が呼び出され、検証が繰り返されます。

つまり、フォームを 4 回送信します。

出力:

field1 can't be blank
field1 can't be blank
field1 can't be blank
field1 can't be blank
field2 can't be blank
field2 can't be blank
field2 can't be blank
field2 can't be blank

検証を一度だけロードする簡単な方法はありますか?メソッドでそれらを呼び出すことからですか?

4

3 に答える 3

0

多分あなたは懸念を使うことができますか?

module Smoresable
  extend ActiveSupport::Concern

  included do
    validates :marshamallow, presence: true
    validates :graham, presence: true
    validates :chocolate, presence: true
  end
end

次のように「子」クラスで使用します。

class FooBar < ActiveRecord::Base
  include Smoresable
end

カスタマイズしたいクラスの場合、リストが十分に短い場合は、必要なものを追加するだけです...または、他の検証グループに追加の問題を作成します

于 2013-08-23T00:45:47.860 に答える