如何解决`对象不支持#inspection`错误?
我正在使用rails v3.2.2,当我尝试加载相关记录时,我收到一个奇怪的错误。
以下是我得到的终端输入/输出:
1.9.2-p318 :011 > Category.first => # 1.9.2-p318 :013 > Category.first.articles Article Load (0.2ms) SELECT `articles`.* FROM `articles` LIMIT 1 (Object doesn't support #inspect) 1.9.2-p318 :014 > Category.first.articles.first Category Load (0.2ms) SELECT `categories`.* FROM `categories` LIMIT 1 NoMethodError: undefined method `scoped' for Category::Article:Module from //.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/association.rb:123:in `target_scope' from //.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/through_association.rb:15:in `target_scope' from //.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/association.rb:87:in `scoped' from //.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/collection_association.rb:569:in `first_or_last' from //.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/collection_association.rb:101:in `first' from //.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/collection_proxy.rb:46:in `first' from (irb):14 from //.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.2/lib/rails/commands/console.rb:47:in `start' from //.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.2/lib/rails/commands/console.rb:8:in `start' from //.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.2/lib/rails/commands.rb:41:in `' from script/rails:6:in `require' from script/rails:6:in `'
在我的Category
模型中,我有:
class Category 'Category::Article::ArticleRelationship', :foreign_key => 'category_id' has_many :articles, :through => :article_relationships, :source => :article end
在我的Category::Article::ArticleRelationship
我有:
class Category::Article::ArticleRelationship 'Article', :foreign_key => 'article_id' end
如何解决与Object doesn't support #inspect
相关的问题Object doesn't support #inspect
?
注意 :在相同的Category
模型中,我有类似于Category::Article::ArticleRelationship
(它通过Category::UserRelationship
类与User
类相关)并且它不会导致问题。
您的应用程序上有两个名为Article
常量。 一个是你的活跃记录类,顶级常量。 另一个是模块Category::Article
。
当你执行belongs_to :article
,看起来rails开始在类中调用一个Article
常量来调用belongs_to,因此它找到了错误的一个。 这会导致各种混乱,因为您显然无法交替使用activerecord类和模块
设置:class_name => '::Article'
强制查找顶级Article
类。
如果使用rails 4,问题来自protected_attributes gem,你需要将gem版本1.0.3升级到1.0.5,然后它才能工作。
问题似乎通过在我的Category::Article::ArticleRelationship
声明以下内容来解决:
class Category::Article::ArticleRelationship < ActiveRecord::Base belongs_to :article, :class_name => '::Article', # note I added '::' :foreign_key => 'article_id' end
但我不明白为什么?