【问题标题】:How do I access devise protected methods ?如何访问设计受保护的方法?
【发布时间】:2015-12-23 20:03:58
【问题描述】:

我正在使用 Rails 4.0.2 和 Devise 3.2.2 来处理用户注册/身份验证。我已启用:confirmable

如何在我的应用程序中访问/调用受设计保护的方法? 我正在尝试使用来自

的受保护的confirmation_period_expired? 方法

http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable#confirmation_period_expired%3F-instance_method

但我收到了 NoMethodError: protected method confirmation_period_expired? 错误。

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby devise ruby-on-rails-4


    【解决方案1】:

    通常不是一个好主意,但如果你必须这样做:

    @user.send(:confirmation_period_expired?) 
    

    会做的。

    【讨论】:

    • 这被认为是不安全的做法。您故意绕过其他程序员设置的安全措施。只是想如果我就如何做这样的事情提供建议,我会发出警告。 :)
    • 嗨 willmanduffy,这是否仅适用于导轨?因为我正在尝试访问 lib/tasks 中的受保护方法,当我运行任务时,它显示 undefined method 'confirmation_period_expired?' for #<ActiveRecord::Relation::ActiveRecord_Relation_User:0x000001049b1ce8>
    • 您试图在 ActiveRecord 关系上调用用户方法,而不是用户对象。试试:relation.first.send(:method_name)
    • 感谢您的回复,我正在尝试使用条件confirmation_period_expired? = true 呼叫所有用户,我尝试了users = User.all.send(:confirmation_period_expired?) (:conditions => 'confirmation_period_expired? is true') 但不起作用。
    【解决方案2】:

    除了send,您还可以在User 上定义一个公共方法。该方法可以调用自身的受保护方法。

    class User
      def is_confirmation_period_expired?
        self.confirmation_period_expired? # self is optional
      end
    end
    

    你可以在没有错误的情况下调用用户的方法吗:@user.is_confirmation_period_expired?

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2011-08-14
      • 2014-12-19
      • 2012-08-06
      • 1970-01-01
      • 2014-12-29
      相关资源
      最近更新 更多