我刚刚在ruby-trello中看到了这行Ruby代码:
# Returns the member who created the action.
one :member_creator, :via => Member, :using => :member_creator_id
它似乎与superclass方法有关,定义为:
def self.one(name, opts = {})
class_eval do
define_method(:"#{name}") do |*args|
options = opts.dup
klass = options.delete(:via) || Trello.const_get(name.to_s.camelize)
ident = options.delete(:using) || :id
klass.find(self.send(ident))
end
end
end
我理解class_eval与反思有关。
有人可以解释一下子类代码行的用途吗?
我的猜测是,它正在调用类成员one
作为名称传递:member_creator
,并将两个尾随args作为opts
参数。但为什么会在课堂上调用它?
答案 0 :(得分:2)
这似乎是一种方法来干掉用于通过主键查找单个记录的一些代码。
您基本上传递了一个类/模型名称和用于获取主键的方法。
此代码:
one :member_creator, :via => Member, :using => :member_creator_id
创建此方法:
def member_creator
Member.find(self.member_creator_id)
end