我尝试了以下内容:
在user.rb
:
before_create :record_sign_up_ip
protected
def record_sign_up_ip
self.sign_up_ip = current_sign_in_ip
end
很遗憾,虽然current_sign_in_ip
的正确本地IP为127.0.0.1
,但sign_up_ip
仍为nil
。如何轻松获取有人注册的IP?通常我会把它放在create
控制器中,但是对于Devise,没有User
的控制器。
答案 0 :(得分:3)
覆盖Devise使用的控制器,如Override devise registrations controller
所述从该帖子修改后,创建app / controllers / users / registrations_controller.rb:
# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
def create
params['user']['sign_up_ip'] = request.env['REMOTE_ADDR']
super
end
end
也从该帖子修改,使用该控制器:
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "users/registrations"}
您还需要使sign_up_up可访问(对于Rails 3):
# app/models/user.rb
attr_accessible :sign_up_ip
答案 1 :(得分:0)
在您的用户模型中
def init
self.sign_up_ip = current_sign_in_ip
end