2

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モデルに for のような同様のステートメントがあり(クラスを介してクラスCategory::Article::ArticleRelationshipに関連しています)、問題は発生しません。UserCategory::UserRelationship

4

3 に答える 3

5

アプリで呼び出される 2 つの定数がありArticleます。1 つは、アクティブなレコード クラス、最上位の定数です。もう 1 つはモジュールです Category::Article

すると、Rails は belongs_to が呼び出されたクラスで定数をbelongs_to :article探し始めたように見えるため、間違った定数を見つけています。ArticleActiverecord クラスとモジュールを同じ意味で使用することは明らかにできないため、これはあらゆる種類の混乱を引き起こします。

設定すると、代わりに:class_name => '::Article'最上位Articleクラスが強制的に検出されます。

于 2012-04-21T01:16:28.710 に答える
0

私の中で次のように述べることで問題は解決したようですCategory::Article::ArticleRelationship

class Category::Article::ArticleRelationship < ActiveRecord::Base
  belongs_to :article,
    :class_name    => '::Article', # note I added '::'
    :foreign_key   => 'article_id'
end

でもなぜか分かりませんでしたか?

于 2012-04-21T01:06:09.820 に答える