Ruby on rails 3 Rails通过将默认用户模型拆分到其他模型来设计gem-定制默认用户模型

Ruby on rails 3 Rails通过将默认用户模型拆分到其他模型来设计gem-定制默认用户模型,ruby-on-rails-3,design-patterns,devise,Ruby On Rails 3,Design Patterns,Devise,我尝试过Desive rails gem,想知道最好的方法是将它创建的用户模型属性分割到多个模型中 目前,我的用户模型如下所示,这是默认的设计行为: 用户(id:整数,电子邮件:字符串,加密密码:字符串, 密码\u salt:string,重置\u密码\u令牌:string,记住\u令牌: 字符串,记住在日期时间创建,在计数中签名,整数, 当前登录时间:datetime,最后登录时间:datetime, ip:string中的当前签名,ip:string中的最后签名,在以下位置创建: datet

我尝试过Desive rails gem,想知道最好的方法是将它创建的用户模型属性分割到多个模型中

目前,我的用户模型如下所示,这是默认的设计行为:

用户(id:整数,电子邮件:字符串,加密密码:字符串, 密码\u salt:string,重置\u密码\u令牌:string,记住\u令牌: 字符串,记住在日期时间创建,在计数中签名,整数, 当前登录时间:datetime,最后登录时间:datetime, ip:string中的当前签名,ip:string中的最后签名,在以下位置创建: datetime,更新时间:datetime)

我希望在另一个模型中具有以下一些属性,例如Watchdog

登录计数,当前登录,最后登录, 当前登录ip,最后登录ip

我正在考虑使用委派方法简单地委派他们:

delegate :sign_in_count, :sign_in_count=, ..., :to => :watchdog
我有兴趣听到这个问题更好的解决方案

谢谢


Sergio

您也可以创建自己的关注点,而无需覆盖设计内部。完成此操作后,仅在模型上扩展可跟踪模块

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

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

        watchdog.sign_in_count ||= 0
        watchdog.sign_in_count += 1

        watchdog.save(:validate => false)
      end
    end
但别忘了把
record.update\u字段放进去!(warden.request)
warden::Manager.after_set_user
上按我们在上所做的那样阻止