我想限制用户可以添加到数据库的记录数量。
我不确定'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放入模型会很麻烦
答案 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。