gpt4 book ai didi

ruby-on-rails - 如何通过 Ruby 中的元编程访问顶级命名空间?

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:12 24 4
gpt4 key购买 nike

我可以通过类名前面的两个冒号来访问 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

关于ruby-on-rails - 如何通过 Ruby 中的元编程访问顶级命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44310971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com