Как решить, что объект не поддерживает ошибку #inspect?
Я использую rails v3.2.2 и получаю странную ошибку при попытке загрузить связанные записи.
Ниже приведен Терминал ввода / вывода, который я получаю:
1.9.2-p318 :011 > Category.first
=> #<Category id: 1, ...>
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 /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/association.rb:123:in `target_scope'
from /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/through_association.rb:15:in `target_scope'
from /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/association.rb:87:in `scoped'
from /<USER_PATH>/.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 /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/associations/collection_association.rb:101:in `first'
from /<USER_PATH>/.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 /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.2/lib/rails/commands/console.rb:47:in `start'
from /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.2/lib/rails/commands/console.rb:8:in `start'
from /<USER_PATH>/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.2/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
В моем Category
модель у меня есть:
class Category < ActiveRecord::Base
has_many :article_relationships,
:class_name => 'Category::Article::ArticleRelationship',
:foreign_key => 'category_id'
has_many :articles,
:through => :article_relationships,
:source => :article
end
В моем Category::Article::ArticleRelationship
Я имею:
class Category::Article::ArticleRelationship < ActiveRecord::Base
belongs_to :article,
:class_name => 'Article',
:foreign_key => 'article_id'
end
Как решить проблему, связанную с Object doesn't support #inspect
?
Примечание: в том же Category
модель у меня есть подобное утверждение, как для Category::Article::ArticleRelationship
(это связано с User
класс через Category::UserRelationship
класс) и это не вызывает проблем.
3 ответа
Есть две константы, называемые Article
в вашем приложении. Одним из них является ваш активный класс записи, константа верхнего уровня. Другой модуль Category::Article
,
Когда вы делаете belongs_to :article
Казалось бы, рельсы начинают искать Article
константа в классе, из которого вызывается own_to, поэтому он находит неправильный. Это приводит к разного рода беспорядкам, поскольку вы, очевидно, не можете использовать класс activerecord и модуль взаимозаменяемо
настройка :class_name => '::Article'
заставляет верхний уровень Article
класс можно найти вместо.
Если вы используете rails 4, проблема возникла из гема protected_attributes, вам нужно обновить версию гема 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
но я не поняла почему?