Ruby on Rails - 将用户限制为一定数量的数据库条目

时间:2014-03-25 15:52:02

标签: ruby-on-rails ruby devise

我想限制用户可以添加到数据库的记录数量。

我不确定'Rails'的方式来解决这个问题......

我正在使用Devise并考虑创建自定义验证方法但您无法从模型中访问current_user并且它不正确。

如何从控制器执行此操作并仍向用户返回错误消息?

我有这个

 validate :post_count

  def post_count
    current = current_user.posts.count
    limit = current_user.roles.first.posts.count

    if current > limit
      errors.add(:post, "Post limit reached!")
    end
  end

但这不是正确的方法,因为将current_user放入模型会很麻烦

1 个答案:

答案 0 :(得分:3)

你可以这样做:

class User < ActiveRecord::Base
  has_many :domains
  has_many :posts, through: :domains

  def post_limit
    roles.first.posts.count
  end
end

class Domain < ActiveRecord::Base
  belongs_to :user
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :domain
  delegate :user, to: :domain
  validate :posts_count_within_limit, on: :create

  def posts_count_within_limit
    if self.user.posts(:reload).count >= self.user.post_limit # self is optional
      errors.add(:base, 'Exceeded posts limit')
    end
  end
end

基于this answer