1

Thingsこの例では、Personcan haveの数を 5 に制限したいと思います。

class Person < ActiveRecord::Base
  has_many :things

  def things_limit_reached?
    self.things.count >= 5
  end
end

true を返すThingときに new にエラーを追加します。person.things_limit_reached?

class Thing < ActiveRecord::Base
  belongs_to :person
  validate :limit_check, :on => :create

  def limit_check
    errors.add :base, 'Things limit reached.' if person.things_limit_reached?
  end
end

Thing悲しいことに、制限にまだ達していなくても、既存の を保存しようとすると、上記のコードは次の例外をスローします。

SystemStackError (stack level too deep):
  actionpack (3.2.7) lib/action_dispatch/middleware/reloader.rb:70

私は何が欠けていますか?

4

1 に答える 1

0

次のように動作するはずです(テストされていません):

class Thing < ActiveRecord::Base    
    belongs_to :person
    before_create :limit_check

    def limit_check         
      if person.things_limit_reached?
        errors.add :base, 'Things limit reached.'           
        return false
      end       
      return true
    end 
end
于 2012-08-19T19:57:13.550 に答える