2
我正在進行元編程任務,在那裏我嘗試使用單個方法來定義調用類中的多態關聯,同時還要定義目標類中的關聯。我需要傳入呼叫類的名稱來獲得關聯權。這裏有一個片段,它應該傳達出的理念:如何在ruby中將自我傳遞給class_eval?
class SomeClass < ActiveRecord::Base
has_many :join_models, :dependent=>:destroy
end
class JoinModel < ActiveRecord::Base
belongs_to :some_class
belongs_to :entity, :polymorphic=>true
end
module Foo
module ClassMethods
def acts_as_entity
has_many :join_models, :as=>:entity, :dependent=>:destroy
has_many :some_classes, :through=>:join_models
klass = self.name.tableize
SomeClass.class_eval "has_many :#{klass}, :through=>:join_models"
end
end
end
我想消除klass=
線,但不知道怎麼回事參考從調用的類傳遞給self
到class_eval
。
有什麼建議嗎?
很好的答案,我學到了一些新的技巧 - 謝謝。你的「註釋」是更好的解決方案 - 我忽略了調用SomeClass.has_many,但瞭解class_exec也很有幫助。 – klochner 2010-04-09 17:05:24