在飞行中更改ActiveRecord关系

art*_*sow 0 activerecord ruby-on-rails ruby-on-rails-3

假设,我有一个模型

class Model < ActiveRecord::Base
  has_many :other_models
end
Run Code Online (Sandbox Code Playgroud)

当加载一些其他代码时,例如一些插件或扩展我想修改这种关系.我通过重新打开课程来尝试这个:

class Model
  has_many :other_models, on_add: :method_on_add
end
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它仅使用第一个关系的选项.任何想法如何实现这一目标?

Muh*_*ais 6

你可以做元编程; 当你的一些代码加载时; 你可以这样做.

Model.class_eval do
  has_many :other_models
  # whatever you want to code
end
Run Code Online (Sandbox Code Playgroud)

是一个关于metaprogrramming的好教程