【发布时间】:2010-04-22 13:45:12
【问题描述】:
现在我有一个初始化器可以做到这一点:
ActiveRecord::Base.send :has_many, :notes, :as => :notable
ActiveRecord::Base.send :accepts_nested_attributes_for, :notes
它可以很好地建立关联,除非我加载使用它的视图时,第二次加载给了我:
can't dup NilClass
来自:
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2184:in `dup'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2184:in `scoped_methods'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2188:in `current_scoped_methods'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2171:in `scoped?'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2439:in `send'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2439:in `initialize'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `new'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `build_association'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:423:in `build_record'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:102:in `build'
(my app)/controllers/manifests_controller.rb:21:in `show'
有什么想法吗?我这样做是错误的吗?有趣的是,如果我将关联移动到我目前正在使用的模型上,我不会收到此错误。我想我一定是错误地建立了全局关联。
【问题讨论】:
-
您是否有任何理由不直接在模型中指定此关联?
-
我有很多很多模型,我希望它们都有注释。 DRY 原则说要把它放到它们都继承的类中。
-
顺便说一句,我做了更多的研究,发现问题只存在于开发中,Rails 会在每个请求上重新加载类。看来 Rails 没有重新加载 ActiveRecord::Base,在这种情况下我想要它。
标签: ruby-on-rails ruby activerecord polymorphic-associations