Невозможно расшифровать эту строку 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