我想将每个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地址。
我有什么建议可以实现吗?
答案 0 :(得分:0)
您需要从控制器传递ip变量。模型无法访问请求变量,并且注册设计不会更新last_sign_in_ip
或last_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
希望这有助于......