gpt4 book ai didi

ruby-on-rails - 将设计用户表拆分为两个表

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:35 25 4
gpt4 key购买 nike

我有一个与 devise gem 集成的用户表。该表有某些字段,如 current_sign_in_ip、last_sign_in_ip、current_sign_in_at 等。设计在用户登录时修改这些字段。我希望将这些字段移动到另一个表并通过设计或其他方式填充它们。有什么办法可以实现吗?

最佳答案

这个答案有两种方法:

第一个(也更简单,虽然不是那么漂亮)选项是将 :trackable 方法委托(delegate)给第二个类(下面称为 UserDetail)。例如:

class UserDetail < ActiveRecord::Base
...
end

class User < ActiveRecord::Base
delegate :current_sign_in_ip, :last_sign_in_ip .... to: :user_detail

...
end

一个更清晰的选择是创建一个避免覆盖 Devise 的关注点。您必须将其扩展到您的 User 模型:

module Trackable
def update_tracked_fields!(request)
old_current, new_current = user_detail.current_sign_in_at, Time.now.utc
user_detail.last_sign_in_at = old_current || new_current
user_detail.current_sign_in_at = new_current

old_current, new_current = self.current_sign_in_ip, request.ip
user_detail.last_sign_in_ip = old_current || new_current
user_detail.current_sign_in_ip = new_current

user_detail.sign_in_count ||= 0
user_detail.sign_in_count += 1

user_detail.save(:validate => false)
end
end

我通过 this link. 从 Rodrigo Flores 那里得到了第二个解决方案他提醒我们将 record.update_tracked_fields!(warden.request) 放在 Warden::Manager.after_set_user block 上,就像他们做的那样 here.

关于ruby-on-rails - 将设计用户表拆分为两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com