Ruby on rails Rails-速率限制a型';创造

Ruby on rails Rails-速率限制a型';创造,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我想看看是否有一个聪明的方法来做如下事情 在我的应用程序中,我有一些项目。我想阻止用户添加超过10个项目。在使用rails几周之后,我的理解是,我应该在我的模型中为此制作一个助手,这听起来对吗 我应该在模型/助手级别执行此操作,还是应该对具有某种类型设置文件的所有模型执行此操作 所以这个想法是,当用户创建一个新项目时,在创建之前,它会检查,如果用户已经有10多个项目,会说,对不起,现在还没有?另外,对如何输出错误消息感兴趣,但对于新手来说,一次只需一步 谢谢将此作为验证方法非常简单。在Rails

我想看看是否有一个聪明的方法来做如下事情

在我的应用程序中,我有一些项目。我想阻止用户添加超过10个项目。在使用rails几周之后,我的理解是,我应该在我的模型中为此制作一个助手,这听起来对吗

我应该在模型/助手级别执行此操作,还是应该对具有某种类型设置文件的所有模型执行此操作

所以这个想法是,当用户创建一个新项目时,在创建之前,它会检查,如果用户已经有10多个项目,会说,对不起,现在还没有?另外,对如何输出错误消息感兴趣,但对于新手来说,一次只需一步


谢谢

将此作为验证方法非常简单。在Rails 3中,您只需声明一个在验证期间运行的方法,如果出现以下情况,它有机会添加错误:

class Project
  validate :user_can_create_projects

protected
  def user_can_create_projects
    if (user and user.projects.count >= 10)
      errors.add_to_base("You have created too many projects.")
    end
  end
end

这并不是一种完全防弹的方法,因为在检查计数和实际创建项目之间,有人能够创建项目的可能性很小。例如,当有人双击表单提交按钮时,这种情况发生的可能性要大得多,但实际上这种情况相对少见。

将其作为一种验证方法非常简单。在Rails 3中,您只需声明一个在验证期间运行的方法,如果出现以下情况,它有机会添加错误:

class Project
  validate :user_can_create_projects

protected
  def user_can_create_projects
    if (user and user.projects.count >= 10)
      errors.add_to_base("You have created too many projects.")
    end
  end
end

这并不是一种完全防弹的方法,因为在检查计数和实际创建项目之间,有人能够创建项目的可能性很小。例如,当有人双击表单提交按钮时,这种情况发生的可能性要大得多,但实际上这种情况相对较少。

如果没有内置的验证器,您可以定制一个。啊,非常有趣。在模型中?如何使用验证器发回错误消息?你能给我举个简单的例子吗?如果没有内置的验证器,你可以定制一个。啊,非常有趣。在模型中?如何使用验证器发回错误消息?你能给我举个简单的例子吗?很酷,很简单,很优雅。我喜欢它。但是,我正在使用Desive进行身份验证。当前用户在模型中不可用,那么如何获得用户?您需要一个可以遵循的关联,或者您需要创建一个
attr\u访问器:user
,仅用于此目的。在控制器中,您将相应地分配它。如果在该上下文中有更多可用信息,也可以在控制器中执行类似的验证。一个
用户。可以创建更多的项目吗?
方法可能会更好。attr\u accessor:user做什么,通过谷歌没有多少内容。同样对于控制器的想法,当我在控制器中执行“Current_User.can_create_more_projects?”时,是在控制器中使用can_create_more_projects定义,还是它仍然存在于模型中,只是由控制器访问?谢谢在控制器中,它是私有的还是受保护的?我是作为before_过滤器还是在实际的create方法中进行检查?谢谢!您应该保护控制器
中的所有实用程序方法
,否则它们可能会无意中暴露为您可以路由到的可能操作。您应该在用户模型本身上定义一个
can\u create\u more\u projects?
方法,作为一个简单计算的公共方法:
self.projects.count<10
始终检查您的API文档:非常酷,如此简单和优雅。我喜欢它。但是,我正在使用Desive进行身份验证。当前用户在模型中不可用,那么如何获得用户?您需要一个可以遵循的关联,或者您需要创建一个
attr\u访问器:user
,仅用于此目的。在控制器中,您将相应地分配它。如果在该上下文中有更多可用信息,也可以在控制器中执行类似的验证。一个
用户。可以创建更多的项目吗?
方法可能会更好。attr\u accessor:user做什么,通过谷歌没有多少内容。同样对于控制器的想法,当我在控制器中执行“Current_User.can_create_more_projects?”时,是在控制器中使用can_create_more_projects定义,还是它仍然存在于模型中,只是由控制器访问?谢谢在控制器中,它是私有的还是受保护的?我是作为before_过滤器还是在实际的create方法中进行检查?谢谢!您应该保护控制器
中的所有实用程序方法
,否则它们可能会无意中暴露为您可以路由到的可能操作。您应该在用户模型本身上定义一个
can\u create\u more\u projects?
方法,作为一个简单计算的公共方法:
self.projects.count<10
始终检查您的API文档: