是否可以在模型文件之外编写ruby回调?

时间:2015-01-27 11:51:15

标签: ruby-on-rails model callback

我是ruby on rails的新手。我想知道是否有任何选项可以在模型文件之外编写ruby回调。

提前致谢

3 个答案:

答案 0 :(得分:3)

您可以使用ActiveSupport :: Concern

来实现
  

在app / model / concerns / model_callbacks.rb

下创建一个文件
 module ModelCallbacks
    extend ActiveSupport::Concern
    included do
      before_create :do_this
      #...
      def do_this
        # ...
      end
    end
 end

在model.rb中包括那个问题

include ModelCallbacks

答案 1 :(得分:0)

可以从模型外部调用它,违反了对象封装的原则

答案 2 :(得分:0)

您可以通过调用require 'filename'并将filename文件放在lib文件夹中来完成。此外,如上所述,您可以使用问题。

示例:

#app/model/user.rb
require 'user_external_callbacks.rb'

Class User < ActiveRecord::Base
  # your normal class
end

#lib/user_external_callbacks.rb
Class User < ActiveRecord::Base
  before_create :my_callback

  private

  def my_callback
  end
end

PS: 您无需在模型文件中调用此require。您可以将此require放在任何模型文件中 - 在文件的开头或末尾,或任何初始化文件(“config / initializers”),或application.rb,或几乎任何被调用的文件一次是通过Rails

PS II: 除非必要,否则请避免将模型回调放入另一个文件中。您将远离Rails编码的默认模式,并且对其他程序员来说维护代码会更加困难。