我有一个用户表与设计宝石集成在一起。该表具有诸如current_sign_in_ip,last_sign_in_ip,current_sign_in_at等的某些字段。当用户登录时,设计会修改这些字段。 我希望将这些字段移动到另一个表并通过设计或其他方式填充它们。有没有办法实现这一目标?将用户表分成两个表
回答
有两种方法,以这样的回答:
第一个(也是更容易,虽然没有漂亮的)选项是委托:trackable
方法,第二类(下文称为UserDetail)。例如:
class UserDetail < ActiveRecord::Base
...
end
class User < ActiveRecord::Base
delegate :current_sign_in_ip, :last_sign_in_ip .... to: :user_detail
...
end
一个清洁的选择是创建一个压倒一切避免制定一个问题。你必须在扩展这个你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.得到了罗德里戈弗洛雷斯第二个解决方案,他提醒我们把record.update_tracked_fields!(warden.request)
的Warden::Manager.after_set_user
块像他们这样做here.
如果有帮助,请随时接受我的回答! –
非常感谢您的回答。当然,它帮助了我。尽管如此,我想提一下我最终如何去做。我没有使用委托,因为我想在我的User模型和UserLogs模型之间建立一对多的关系,并且我希望user_logs表是一个只能插入的表。所以,我根据它重写了设备update_tracked_fields。再次感谢。 –
感谢上响应。它帮助我朝着正确的方向前进。 让我分享我如何解决我面临的问题。
由于我想要用户和user_logs表之间的一对多关系,我无法将可跟踪的方法委托给UserLog模型。 另外,我希望user_logs表是一个只能插入的表,因此我需要相应地覆盖Devise Trackable模块的update_tracked_fields方法。
所以:
我创建了一个新的user_logs表和用户日志模式。
覆盖update_tracked_fields方法,每次在user_logs表中实际插入新行,而不是更新用户表。
为用户模型中的这些可跟踪字段创建getter方法,该方法实际上从user_logs表中获取所需的列值。就像这样:
self.try(:user_logs).last.try(:current_sign_in_ip)
- 1. 将表格分成两半
- 2. 将列表分成两列
- 3. 将表单分成两列
- 4. 分离列表分成两个列表
- 5. 将nltk.FreqDist单词分成两个列表?
- 6. 将SQL数据分成两个表格
- 7. 将ARGV分成两个文件列表
- 8. 将R样本分成两个列表
- 9. Rails迁移:如何将一个表分成两个表?
- 10. 将div分成两部分,用于多个注册表单
- 11. 将两个表合并成一张表
- 12. 如何将列表分成两个列表
- 13. Ansible - 如何将列表分成两个列表?
- 14. 如何将列表分成两个列表?
- 15. 如何将2元组列表分割成两个列表?
- 16. 我应该将组织表分成两个表吗?
- 17. 将列表分成两个非空列表的所有方法
- 18. 将电子表格分成两个或更多电子表格?
- 19. 将列表划分为两个列表
- 20. 将数据从两个表格分成两列
- 21. 试图将表分成两列
- 22. 如何使用Spring Boot将数据分成两个表?
- 23. 将一个列表分成两部分。 C
- 24. 将列表拆分成多个列表
- 25. 将HTML表格分成多个表JQuery
- 26. PHP $ _POST值分成两个属性表
- 27. 如何将一个列表分成两个列?
- 28. 表分割 - 是否可以将表分成两个完全独立的实体?
- 29. Python-将两个列表组合成一个列表列表
- 30. 使用python将元素分成两个列表中的新列表
'色器件:trackable'该模型,你必须传递领域 –
这并不工作。 –