我有以下代码:
class Like < ActiveRecord::Base
belongs_to :site
validates_uniqueness_of :ip_address, :scope => [:site_id]
end
这限制了一个人根据远程ip请求多次“喜欢”一个站点。基本上当有人“喜欢”某个网站时,会在Likes表中创建一条记录,我会使用一个隐藏字段来请求并将其ip地址传递给like表中的:ip_address列。使用上面的代码,我将用户的IP地址限制为一个“喜欢”。我想将此限制为某个数字,例如10.
我最初的想法是做这样的事情:
validates_uniqueness_of :ip_address, :scope => [:site_id, :limit => 10]
但这似乎不起作用。这里有一个简单的语法可以让我做这样的事情吗?
答案 0 :(得分:2)
你可以试试这个:
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
注意:强>
I use a hidden field to request and pass their ip address to the :ip_address
column in the like table.
您是否这样做是为了获取客户端的IP地址?您可以从请求对象中获取IP地址。
例如:在您的控制器/视图中:
request.remote_ip
答案 1 :(得分:0)
没有快捷方式宏。
您将需要以下内容:
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