10

I would like to limit the number of model Objects a user can create. I've tried the below but it is not working. I understand some changes have happened in rails 3.1 and not sure how to accomplish this now.

class User < ActiveRecord::Base
  has_many :things, :limit => 5, :dependent => :destroy # This doesn't work
end

class Things <ActiveRecord::Base
  belongs_to :user
end
mu is too short
  • 426,620
  • 70
  • 833
  • 800
user892583
  • 267
  • 3
  • 13

2 Answers2

17

Try something like this:

class User < ActiveRecord::Base
  has_many :things
end

class Things <ActiveRecord::Base
  belongs_to :user
  validate :thing_count_within_limit, :on => :create

  def thing_count_within_limit
    if self.user.things(:reload).count >= 5
      errors.add(:base, "Exceeded thing limit")
    end
  end
end

Edit: updated for Rails 3

Alex Peattie
  • 26,633
  • 5
  • 50
  • 52
3

It did not work on Rails 3.2.1. Count always equals to 0. I have replaced it with self.user.things.size and now it works.

sekrett
  • 1,205
  • 1
  • 15
  • 17