before_filter类似于lib类中的功能

时间:2013-07-29 05:20:59

标签: ruby ruby-on-rails-4

我正在尝试在我的rails应用程序的lib目录中创建一个类,其中的方法都在类上调用。在每种方法之前,我想运行一些对所有方法都通用的代码。我环顾四周,找到了几种方法,但它们似乎只与实例方法有关而不是类方法。

我的课看起来有点像这样:

class Push

    def self.user_checked_in(user, trip)
        ...
    end

    ... Other methods ...

end

我想要的是拥有像

这样的东西
before_filter :method

就像控制器一样。什么是最好的方法,或者是否可以简单地包含来自控制器的负责代码?

1 个答案:

答案 0 :(得分:0)

我不喜欢用不必要的方法弄乱我的控制器。在你的情况下,我认为最干净的方法是使用装饰器。 This post涵盖了Ruby中的一些装饰器,非常受欢迎。我个人喜欢this decorator gem。然后你的方法看起来像这样:

class Push
    +MyDecorator
    def self.user_checked_in(user, trip)
        ...
    end
end

如果你想为每一个方法做这个,你可以自己覆盖method_added,但除非你有很多方法,否则我建议去装饰器:它更明显,并且编写方法更容易你不希望那些代码调用的地方。