我可以在模型实例上覆盖AcitveRecord :: Base#to_json吗?

时间:2012-11-06 15:28:39

标签: ruby mixins

在Rails 2.3中,我有一个Rails引擎,它有自己的命名空间控制器,但它将使用主应用程序的模型。

但是,我想覆盖ActiveRecord :: Base#to_json方法的默认行为,但仅限于从Engine 使用模型时。

所以在Engine控制器中做一些像......这样的事情是合理的。

category.questions.each do |qst|
  # override ActiveRecord::Base#to_json somehow on the qst instance 
end

......如果从概念上来说这是合理的,我怎么会真正去做这样的事情呢?

如果不合理,那么仅为引擎覆盖ActiveRecord :: Base#to_json的最佳方式是什么,而不是主应用程序?

谢谢,

保罗

1 个答案:

答案 0 :(得分:0)

您可以使用instance_eval

执行此操作
category.questions.each do |qst|
  qst.instance_eval do
    # do something here
  end
end

但是,我不确定这实际上是否适合您想要做的策略。一种更简单的方法是制作一种不同命名的方法,并在引擎中使用它代替to_json