通过ActiveRecord :: Base访问类

时间:2014-10-17 05:28:09

标签: ruby-on-rails ruby activerecord gem

我正在编写一个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()。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用String#constantizeString#classify

=> cons = "user".classify.constantize
#> User
=> cons.create()

答案 1 :(得分:0)

没有必要在ActiveRecord::Base上调用它,因为该模型是ActiveRecord::Base的子类,但不是ActiveRecord::Base命名空间中的常量。

相反,只需在Module上调用它:

Module.const_get(model).create(attributes)