我有一个模型,每次从中访问数据或保存到数据时都需要触发一个方法。我很难弄清楚如何触发该方法。
以下是我尝试的内容:
class MyModel < ActiveRecord::Base
after_initialize :hello
def hello
binding.pry
end
end
我的理解是,只要访问此模型,after_initialize就会触发,但显然情况并非如此。如何通过以下呼叫触发此操作:
@instance = MyModel.paginate()
答案 0 :(得分:0)
以下是所有callbacks
after_initialize, after_find, after_touch, before_validation, after_validation,
before_save, around_save, after_save, before_create, around_create,
after_create, before_update, around_update, after_update,
before_destroy, around_destroy, after_destroy, after_commit, after_rollback
您可以使用任何这些回调触发您的方法。参见示例
class MyModel < ActiveRecord::Base
after_find :hello
after_save :hello
# call_back goes here ...
def hello
binding.pry
end
end
实例化新对象后触发 after_initialize
,如
MyModel.new()
答案 1 :(得分:0)
Rails没有提供通常可以在这样的操作中访问的方式,但是对于单个案例,它确实可以执行类似
的操作class MyModel < ActiveRecord::Base
#all cases that wanna include
before_save :hello
after_save :hello
after_initialize :hello
def hello
binding.pry
end
end
检查来自documentation
的可用回调答案 2 :(得分:0)
after_initialize
在创建实例后触发,而不是在访问实例时触发。实际上,这是什么意思&#34;它被访问&#34;?
如果您指的是调用任何对象方法或调用持久性方法等,它会产生很大的不同。
根据您的需要,您可能希望使用Proxy对象。您可以将实例封装在获取调用的Proxy中,记录要记录的内容,然后调用该对象。否则,你需要覆盖/猴子补丁类中的所有方法,这绝对不是一个好主意。
@instance = MethodLogger.new(@instance)
@instance.paginate