Rails设计限制每个ip的用户注册

时间:2017-04-11 13:18:42

标签: ruby-on-rails devise

我想将每个IP的用户注册限制为3! 在用户模型中,我有:

class User < ApplicationRecord    
  validate :validate_ip
  def validate_ip
    errors[:username] << "My error description" if User.where(last_sign_in_ip: last_sign_in_ip).count > 3
  end
end

我确实知道这一行中的问题User.where(last_sign_in_ip: last_sign_in_ip)  &#34; last_sign_in_ip&#34;是空的。这就是为什么我的病情无法奏效的原因。我需要以某种方式获取模型中用户的IP地址。

我有什么建议可以实现吗?

1 个答案:

答案 0 :(得分:0)

您需要从控制器传递ip变量。模型无法访问请求变量,并且注册设计不会更新last_sign_in_iplast_sign_in_ip,因此它们为空。它们仅在登录时设置。

在创建用户对象之前在控制器中将ip值作为实例变量传递

@remote_ip = request.remote_ip

然后在您的模型中使用以下代码:

class User < ApplicationRecord    
  validate :validate_ip
  def validate_ip
    errors[:username] << "My error description" if check_multiple_sign_ups
  end

  def check_multiple_sign_ups
    recent_user_count = User.where(last_sign_in_ip: @remote_ip ).count
    (recent_user_count > 3 ) ? false : true
  end
end

希望这有助于......

相关问题