2014-03-25 33 views
2

我想限制用户可以添加到数据库的记录数量。Ruby on Rails - 将用户限制到一定数量的数据库条目

我不知道的“Rails的路要走,这个...

我使用的设计和创建一个自定义的验证方法的思想,但你不能从模型中访问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

也许你可以验证创建一个新的职位。然后,您可以计算同一用户创建的帖子数量与当前正在创建的帖子的创建者数量(从而避免current_user的问题)并将其与该用户的限制进行比较。 – Coenwulf

+0

好的,我怎么能从模型中检查'limit = current_user.roles.first.posts.count'? –

+1

请参阅backpackerhh的答案,但我建议移动代码以检索用户类中方法的限制。 – Coenwulf

回答

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

+0

好吧,看起来不错,但我需要从数据库中获取当前用户限制? –

+0

只需将''替换为'user.roles.first.posts.count'(假设这是数据库中的限制)。 – Chowlett

+0

更新了答案。 – backpackerhh

相关问题