我尝试了以下方法:
在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
Controller 中,但是使用 Devise,没有用于 User
的 Controller 。
最佳答案
覆盖 Devise 使用的 Controller ,如 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
还对该帖子进行了修改,以使用该 Controller :
# 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
关于ruby-on-rails - 如何记录用户使用 Devise 和 Ruby on Rails 注册的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274630/