2017-04-11 62 views
1

我想限制用戶每個IP註冊3! 在用戶模式,我有:Rails根據ip設計限制用戶註冊

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) 「last_sign_in_ip」是空的。這就是爲什麼我的情況不起作用。我需要以某種方式獲得模型內用戶的IP地址。

任何意見,我怎麼能實現它?

+0

那麼你看到了什麼問題?是否有錯誤或異常? – SteveTurczyn

+0

這種方法是正確的。解釋你面臨的問題。 https://github.com/JangoSteve/remotipart – abhsss96

+0

問題已更新 –

回答

0

您需要從控制器傳遞ip變量。模型無法訪問請求變量,並且在註冊時不會更新last_sign_in_iplast_sign_in_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 

希望這有助於...