如何通过Ruby中的元编程访问顶级名称空间



我可以在Ruby中访问Ruby中的顶级名称空间,其中有两个属于班级名称,例如::AmbiguousClass

我该如何通过元编程来做到这一点?

我有很多验证和返回给定类的方法(超过5个(,所有方法都包括这样的行:

player = ::Player.find_by(uuid: input.player_uuid)

我想让这一更为笼统,这样我就可以通过班级通过uuid找到,然后将所有这些方法切成一种。这就是我尝试的:

def validate_and_return(model_name)
  uuid_attr = "#{model_name}_uuid".to_sym
  return unless input.respond_to?(uuid_attr)
  klass = ::model_name.to_s.captialize.constantize
  instance = klass.find_by(uuid: input.send(uuid_attr))
  # validate instance
end

不起作用 - 它返回语法错误:

Class: <SyntaxError>
Message: <"/home/dax/programming/xxx/lib/bus/converters/converter.rb:48: syntax error, unexpected tIDENTIFIER, expecting tCONSTANT

迈克尔·戈尔曼(Michael Gorman(的字符串插值建议很好,这是最终工作的方法:

klass = "::#{model_name.to_s.capitalize}".constantize

您可以使用字符串插值

"::#{model_name}".captialize.constantize

最新更新