首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >validates_uniqueness_of...limiting作用域-如何限制某人创建一定数量的条目

validates_uniqueness_of...limiting作用域-如何限制某人创建一定数量的条目
EN

Stack Overflow用户
提问于 2010-05-12 12:08:29
回答 2查看 1K关注 0票数 3

我有以下代码:

代码语言:javascript
复制
class Like < ActiveRecord::Base
  belongs_to :site
  validates_uniqueness_of :ip_address, :scope => [:site_id]
end

这限制了一个人基于远程ip请求一次以上地“喜欢”一个站点。基本上,当有人“喜欢”一个站点时,like表中会创建一条记录,我使用一个隐藏字段来请求他们的ip地址,并将其传递给like表中的:ip_address列。使用上面的代码,我将用户限制为每个ip地址只能有一个“喜欢”。我想将其限制在一个特定的数字,例如10。

我最初的想法是这样做:

代码语言:javascript
复制
validates_uniqueness_of :ip_address, :scope => [:site_id, :limit => 10]

但这似乎并不管用。这里有没有一个简单的语法可以让我做这样的事情?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-15 02:38:15

您可以尝试这样做:

代码语言:javascript
复制
class Like < ActiveRecord::Base
  validates_each :ip_address do |row, attr, value|
    m.errors.add :ip_address, 'Too many likes' unless row.like_count < 10
  end

  def like_count
    Like.count(:conditions => {:ip_address => ip_address, :site_id => site_id})
  end
end

备注:

代码语言:javascript
复制
I use a hidden field to request and pass their ip address to the :ip_address 
column in the like table. 

您这样做是为了获取客户端的IP地址吗?您可以从请求对象中获取IP地址。

例如:在你的控制器/视图中:

代码语言:javascript
复制
request.remote_ip
票数 2
EN

Stack Overflow用户

发布于 2010-05-12 12:22:21

不,没有快捷宏。

您将需要类似以下内容:

代码语言:javascript
复制
validate do |record|
  if count(:conditions => ['`id` <> ? AND `ip_address` = ? AND `site_id` = ?',
                           record.id, record.ip_address, record.site_id]) > 10
    record.errors.add(:ip_address, "has been liked the maximum number of times")
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2816069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档