【问题标题】:Reopen controller of gem重新打开 gem 的控制器
【发布时间】:2013-04-10 08:36:29
【问题描述】:

我使用inboxes gem,我需要将设计方法(:authenticate_user!)添加到inboxes gem 的base_controller。对不起我的英语

【问题讨论】:

  • 像所有 ruby​​ 方法一样,重新打开它并添加你想要的。

标签: ruby-on-rails controller gem metaprogramming


【解决方案1】:

我不熟悉收件箱 gem,但如果您无法指定自己的收件箱控制器(例如,通过路由),您可以考虑将 before_filter 添加到您的 ApplicationController:

before_filter :authenticate_user! if self.controller_path == 'inboxes/base'

如果您可以指定自己的基本控制器,您就可以像这样扩展 Inboxes::BaseController:

class MyInboxesController < Inboxes::BaseController
  # ...
end

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您看到 Inboxes::BaseController 控制器,它是从应用程序控制器继承的,因此您可以向应用程序控制器添加方法,然后可以从 Inboxes::BaseController 使用方法。

    但如果你想在 Inboxes::BaseController 中添加方法,那么为它编写一个猴子补丁文件并将该文件放在 config/initializer 文件夹中

    喜欢:

    class Inboxes::BaseController
      #
      # Add method here  
      # 
    end
    

    【讨论】:

    • 我不能将此方法添加到 ApplicationController 因为我不需要它。在第二种情况下,这不起作用,因为它不知道方法 before_filter
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多