加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 使用Object.const_set创建rails模型

发布时间:2020-12-17 02:18:46 所属栏目:百科 来源:网络整理
导读:我正在使用Neo4j在rails控制台中玩游戏,并试图创建一个这样的模型类: Object.const_set("TestNode",Class.new(super_class=Neo4j::Rails::Model))node = TestNode.new 如果我然后尝试使用node.save保存实例,我会收到一堆错误: node.saveNoMethodError: und
我正在使用Neo4j在rails控制台中玩游戏,并试图创建一个这样的模型类:

Object.const_set("TestNode",Class.new(super_class=Neo4j::Rails::Model))
node = TestNode.new

如果我然后尝试使用node.save保存实例,我会收到一堆错误:

node.save
NoMethodError: undefined method `each' for nil:NilClass
from /Users/oskbor/.rvm/gems/jruby-1.6.7.2/gems/neo4j-2.0.0-java/lib/neo4j/rails/attributes.rb:57:in `init_on_create'
from /Users/oskbor/.rvm/gems/jruby-1.6.7.2/gems/neo4j-2.0.0-java/lib/neo4j/rails/node_persistance.rb:16:in `create'
from /Users/oskbor/.rvm/gems/jruby-1.6.7.2/gems/neo4j-2.0.0-java/lib/neo4j/rails/callbacks.rb:39:in `create_with_callbacks'
from /Users/oskbor/.rvm/gems/jruby-1.6.7.2/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:417:in `_run__1980184148__create__1722973119__callbacks'
from org/jruby/RubyKernel.java:2076:in `send'
...

如果我像正常一样创建TestNode类,一切都有效:

class TestNode < Neo4j::Rails::Model
end

创建模型类TestNode的第一种方法有什么问题?

我想到的目标是能够使用元编程动态创建新模型,然后能够将实例持久化到neo4j数据库.

解决方法

正如Andreas Ronge评论的那样,使用Object.const_set时不会触发一些回调.评估字符串是有效的,所以这是我的解决方案:

name ="Classname"
super_klass ="Neo4j::Rails::Model"
string_to_eval = "class #{name} < #{super_klass}; end;"
eval(string_to_eval,TOPLEVEL_BINDING)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读