我正在编写一个ruby gem,它将数据导入ActiveRecord,接收用户想要放入数据的环境和类。 我能够使用ActiveRecord :: Base.establish_connection(...)连接到环境,但我无法弄清楚如何访问传入的Class来做,比如,Location.create(...)。
我不想通过执行传递它,因为它会跳过验证,但我怀疑我可以访问ActiveRecord类。
我发现了一篇我认为有帮助的文章(http://erikonrails.snowedin.net/?p=212),但我正在这样做:
ActiveRecord::Base.const_get(model).create(attributes)
并获得
uninitialized constant ActiveRecord::Base::Location (NameError)
当我使用ActiveRecord :: Base.connection.const_get(model)尝试上述操作时,我只是得到了一个巨大的对象。我正在寻找一种方法来上课,就像我如何在Rails中我可以调用User.create()。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用String#constantize
和String#classify
:
=> cons = "user".classify.constantize
#> User
=> cons.create()
答案 1 :(得分:0)
没有必要在ActiveRecord::Base
上调用它,因为该模型是ActiveRecord::Base
的子类,但不是ActiveRecord::Base
命名空间中的常量。
相反,只需在Module
上调用它:
Module.const_get(model).create(attributes)