无法破译这个包含地图运算符的Ruby行

时间:2012-12-03 16:39:20

标签: ruby reflection class-eval

我刚刚在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参数。但为什么会在课堂上调用它?

1 个答案:

答案 0 :(得分:2)

这似乎是一种方法来干掉用于通过主键查找单个记录的一些代码。

您基本上传递了一个类/模型名称和用于获取主键的方法。

此代码:

one :member_creator, :via => Member, :using => :member_creator_id

创建此方法:

def member_creator 
  Member.find(self.member_creator_id)
end