0

我已经在这个问题上苦苦挣扎了一段时间,但我无法处理它。

我有一个在 Rails 2.3.18/ruby1.8.7 上运行良好的网站

我正试图把它带到 Rails3 上。我已经按照指南完成了视图更新(使用 rails_xss)。我现在正试图让测试套件通过并遇到以下奇怪的问题:

/Users/jon/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.0.20/lib/active_record/reflection.rb:71:
in `reflect_on_association': undefined method `[]'   
for #<ActiveRecord::Reflection::AssociationReflection:0x00000100b607a0> (NoMethodError)
from  /Users/jon/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord- 3.0.20/lib/active_record/autosave_association.rb:138:in `has_many'
from /projects/mau/app/models/studio.rb:7:in `<class:Studio>'
from /projects/mau/app/models/studio.rb:3:in `<top (required)>'
...
from /Users/jon/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/railties-3.0.20/lib/rails/application.rb:134:in `initialize!'
from /Users/jon/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/railties-3.0.20/lib/rails/application.rb:77:in `method_missing'
from /projects/mau/config/environment.rb:5:in `<top (required)>'
from /projects/mau/spec/spec_helper.rb:3:in `require'
from /projects/mau/spec/spec_helper.rb:3:in `<top (required)>'

看似相关的代码位是我的Studio模型有很多artists. 并且Artist模型来源于User

class Studio < ActiveRecord::Base
  has_many :users
  ...
end

class Artist < User
  ...
end 

class User < ActiveRecord::Base
  belongs_to :studio
  ...
end 

我仍然restful_authentication参与该项目,并计划将其删除,但希望在运行测试套件后我能做到这一点。在这一点上,我无法运行rails任何东西,因为一旦我访问这些有问题的对象之一,事情就会失败。

我已经研究过升级 ruby​​ (1.9.3) 但仍然遇到同样的问题。

我已经深入研究了调试器,但找不到任何相关的东西。

我尝试使用完整的类名和外键指定belongs_to/has_many关系 - 没有区别。

我尝试了从 3.0.1 到 3.0.20 的不同版本的 Rails 3.0.x。没有效果。同样的问题。

我已经尝试了所有复数和单数 forhas_manybelongs_to符号的组合。

最糟糕的是,我在不同的对象上还有一些其他关系,这些关系似乎很愉快地设置了。他们不涉及User让我担心它是restful_authentication位的模型。

对于我的一生,我无法弄清楚是什么。如果有人有任何想法或以前看过这个,我很乐意提供帮助。

我正在尝试进入 Rails 3.0.20,目的是从那里向前滚动到 3.1,然后是 3.2。在我进一步推进之前,我真的很想在 3.0.20 上获得一个半稳定的版本。

提前感谢罗杰斯先生的任何提示/技巧

4

1 回答 1

0

我找到了问题的根源。

对于旧版本(Rails 2.3.18),我使用的是has_many_polymorphs. 这个插件不再对 Rails3 有效。我在https://github.com/jystewart/has_many_polymorphs升级到“Rails 3 兼容版本” ,它与 Rails 3.2 兼容,但不兼容 3.0。此 gem 补丁中的代码ActiveRecord::Reflection::ClassMethods。该补丁不符合 Rails 3.0.x 建立关联的方式。

我想是时候转向ActiveRecord's原生 :polymorphic 支持了。

于 2013-09-29T00:32:55.253 回答