Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 升级中包含了支持Rails 4/5的\u magic\u gem列_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 升级中包含了支持Rails 4/5的\u magic\u gem列

Ruby on rails 升级中包含了支持Rails 4/5的\u magic\u gem列,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我使用这个gem()允许我的客户在每个帐户级别上定义自定义属性。e、 g.对于Orders对象,客户A可以添加“field1”、“field2”作为属性,而客户B可以添加“field3”和“field4”,而无需我将它们作为实际列添加到Orders表中 这个gem在经过rails3后停止工作。我下载了gem代码,修复了一些小问题,并升级了gempec以支持rails 4.2,但仍停留在核心问题上,这反映在规范失败中,例如: 更新的堆栈跟踪: 1) HasMagicColumns on a sin

我使用这个gem()允许我的客户在每个帐户级别上定义自定义属性。e、 g.对于Orders对象,客户A可以添加“field1”、“field2”作为属性,而客户B可以添加“field3”和“field4”,而无需我将它们作为实际列添加到Orders表中

这个gem在经过rails3后停止工作。我下载了gem代码,修复了一些小问题,并升级了gempec以支持rails 4.2,但仍停留在核心问题上,这反映在规范失败中,例如:

更新的堆栈跟踪:

1) HasMagicColumns on a single model allows setting and saving of magic attributes

 SystemStackError:
   stack level too deep
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/associations/through_association.rb:6:in `through_reflection'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/associations/through_association.rb:68:in `stale_state'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/associations/association.rb:76:in `stale_target?'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/associations/collection_association.rb:32:in `reader'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/associations/builder/association.rb:115:in `magic_attributes'
 # ./lib/has_magic_columns/active_record.rb:162:in `find_magic_attribute_by_column'
 # ./lib/has_magic_columns/active_record.rb:142:in `block in initialize_magic_columns'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'
 # ./lib/has_magic_columns/active_record.rb:141:in `initialize_magic_columns'
 # ./lib/has_magic_columns/active_record.rb:113:in `rescue in method_missing'
 # ./lib/has_magic_columns/active_record.rb:107:in `method_missing'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/persistence.rb:240:in `update_attribute'
 # ./lib/has_magic_columns/active_record.rb:154:in `block in initialize_magic_columns'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'
 # /Users/testuser/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'

那块宝石很古老,没有保养。正如自述文件所说,它最初是作为Rails2插件编写的,然后打包成一个gem用于Rails3

除非您计划进行一次重要的重写,否则我不建议您仅仅“消除测试错误并使其正常工作”

相反,为什么不使用Rails 4.2提供的新功能呢

如果您使用的是PostgreSQL,Rails 4支持本机列类型,如
hstore
JSON

如果您不在PostgreSQL上,您仍然可以使用序列化属性:

如果你真的需要一个外观界面,给人一种真实模型属性的错觉,你可以很容易地使用它,或者你可以在我上面链接的基础上重新实现gem。
但是我认为您不需要它们,因为如果您的客户可以定义自定义属性,那么我认为您的代码不会在任何地方硬编码它们。

看起来它在第149行抛出了一个错误,然后在第110行被解救并反复重试,直到它抛出一个堆栈级别太深的错误。因此,请尝试在第149行打印出错误,这样您就可以看到它爆炸的原因。我用更好的堆栈跟踪更新了描述。不确定您在这上面的位置,但是如果您启动了一个新的Gem来替换它,我会帮您编写它。我们需要在我的工作中使用它,我认为这对于企业应用程序来说是一个相当常见的问题,它会得到一些牵引和维护帮助。感谢您的详细回复。我想澄清一下您在回复中的最后一点:自定义属性存储在MySQL中,存储在has_magic_列的DB迁移文件创建的表中。因此,我们在代码库中提供的特定于客户的混合项最终必须按名称引用这些自定义属性。您是否根据客户使用web GUI定义的内容添加新代码?e、 g.客户在模型
Foo
上定义一个新的自定义属性
bar
,然后开始编写执行
Foo.first.bar
的代码?听起来很危险。我不知道你指的是什么危险。我们有一个基础平台,可以扩展到每个客户帐户。因此,引用其自定义属性的代码仅针对其帐户/网页运行。我应该补充的是,所有的标准安全检查(sql注入、CSRF、XSS等)也可以针对这些定制的混合插件运行。我们还定期对代码库运行大量审计/安全笔测试,以确保没有公开的安全问题,这也意味着这些自定义属性是由我们的支持团队代表每个帐户的设置完成的。因此,在我们在生产环境中设置相同的自定义属性之前,在我们的QA环境中进行了完整的回归测试(这也得到了回归测试)。我希望这能澄清你的顾虑哦,对。我认为他们可以用一种web UI来改变ORM界面。那就有道理了。