San*_*ino 1 activerecord initialization ruby-on-rails callback
我有一个Message模型类(继承自ActiveRecord :: Base).对于特定部署,我希望有一个单独的文件,通过添加回调来修改Message.所以,而不是做:
# app/models/message.rb
class Message < ActiveRecord::Base
before_save :foo
def foo
puts 'foo!'
end
end
Run Code Online (Sandbox Code Playgroud)
我希望能够做到:
# app/models/message.rb
class Message < ActiveRecord::Base
end
# config/initializers/fixes.rb
Message
class Message
before_save :foo
def foo
puts 'foo!'
end
end
Run Code Online (Sandbox Code Playgroud)
问题是,它在我启动脚本/控制台时有效,但是当我使用脚本/服务器启动它时通常不会.这是最糟糕的部分,并不是它永远不会奏效.有时我启动服务器并且它可以工作,有时它不工作,而且没有对源进行任何更改.
我正在重新启动服务器本身(据我所知)初始化程序只运行一次,如果修改则不会重新加载.
我知道'有时'的作品很模糊,但我在这里花了好几个小时没有运气.也许某人有类似的问题,或者可以想出一个不同的想法来添加回调.
为什么不将它们放入模块并导入它?
class Message < ActiveRecord::Base
include Message::Callbacks
end
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,您可以定义任何您喜欢的内容,例如message/callbacks.rb:
module Message::Callbacks
def self.included(base)
base.class_eval do
before_save :foo
end
end
def foo
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
这方面的缺点是使方法受到保护的工作量更大.