【发布时间】:2013-07-24 13:15:15
【问题描述】:
我有一个如下所示的课程:
class Refinery::Blog::Post < ActiveRecord::Base
belongs_to :author, class_name: '::Refinery::User', foreign_key: :user_id
# SNIP very long class body
end
如果我能提供帮助,我不想重写整个类,因为那里有很多行为应该保持不变,并且引擎的许多其他部分通过名称引用该类,所以我不能子类化它.有什么方法可以使用class_eval 来删除或替换现有的关联?我试着像这样重新定义它:
Refinery::Base::Post.class_eval do
belongs_to :author, class_name: 'MyUser', foreign_key: :user_id
end
但它似乎不起作用。
【问题讨论】:
-
你能用 send 代替 class eval 看看它是否有效吗? class_eval 将在 rails 的 eigen 类上下文中评估该代码。
标签: ruby-on-rails ruby metaprogramming rails-activerecord refinerycms