Невозможно расшифровать эту строку Ruby, содержащую оператор карты

Я только что видел эту строку кода Ruby в ruby-trello:

# Returns the member who created the action.
one :member_creator, :via => Member, :using => :member_creator_id

Кажется, это относится к методу суперкласса, определенному как:

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 как имя и два конечных аргумента как opts аргумент. Но почему бы это назвать на уровне класса?

1 ответ

Решение

Похоже, это способ высушить некоторый код, используемый для поиска одной записи по первичному ключу.

Вы в основном передаете имя класса / модели и метод, используемый для получения первичного ключа.

Этот код:

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

Создает этот метод:

def member_creator 
  Member.find(self.member_creator_id)
end
Другие вопросы по тегам