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

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

用户(id:整数,email:字符串,encrypted_pa​​ssword:字符串,password_salt:字符串,reset_password_token:字符串,Remember_token:字符串,Remember_created_at:日期时间,sign_in_count:整数,current_sign_in_at:日期时间,last_sign_in_at:日期时间,current_sign_in_ip:字符串:last_sign_in created_at:日期时间,updated_at:日期时间)

我想在另一个模型中具有以下某些属性,例如看门狗

sign_in_count,current_sign_in_at,last_sign_in_at,current_sign_in_ip,last_sign_in_ip

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

delegate :sign_in_count, :sign_in_count=, ..., :to => :watchdog

有兴趣听到有关此问题的更好解决方案的信息。

谢谢,

塞尔吉奥

===============>>#1 票数:2

您也可以创建自己的关注点,而不必覆盖Devise内部。 之后,仅在模型上扩展Trackable module

    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

但是不要忘记像在Devise hook上一样,将record.update_tracked_fields!(warden.request)放在Warden::Manager.after_set_user块上。

  ask by slombo translate from so

未解决问题?本站智能推荐: