5

サイトのユーザーがページをお気に入りできるシステムを作成しようとしています。これらのページには、クラブまたはスポーツの 2 つのタイプがあります。したがって、次のように関連付けられた 4 つのモデルがあります。

ユーザー モデル:

class User < ActiveRecord::Base
    ..
    has_many :favorites
    has_many :sports,    :through => :favorites
    has_many :clubs,     :through => :favorites
    ..
end

お気に入りのモデル:

class Favorite < ActiveRecord::Base
    ..

    belongs_to :user
    belongs_to :favoritable, :polymorphic => true

end

クラブモデル:

class Club < ActiveRecord::Base
    ..

    has_many :favorites, :as => :favoritable
    has_many :users, :through => :favorites

    def to_param
      slug
    end
end

スポーツモデル:

class Sport < ActiveRecord::Base
    ..

    def to_param
        slug
    end

    ..

    has_many :favorites,   :as => :favoritable
    has_many :users,       :through => :favorites

    ..
end

基本的に、ユーザーはお気に入りを通じて多くのスポーツまたはクラブを持っており、お気に入り、スポーツ、およびクラブの間の関連付けは多態的です。

実際には、これはすべて思い通りに機能しており、私が設計したシステム全体が機能しています。ただし、自分のサイトで Rails_Admin を使用していて、次の 3 か所でエラーが発生します。

  1. 初めてダッシュボード (/admin) をロードするとき。ページを更新すると、正常に動作します。
  2. Rails_Admin で User モデルをロードする場合
  3. Rails_Admin で Favorites モデルをロードする場合

/admin/user (gist)のエラーメッセージは次のとおりです。すべてのエラーは類似しており、 を参照していますActiveRecord::Reflection::ThroughReflection#foreign_key delegated to source_reflection.foreign_key, but source_reflection is nil:

これを修正できるように、誰かが私を正しい方向に向けることができますか? 私はあちこちを検索し、他のプログラマー/専門家に尋ねましたが、誰も私のモデルのエラーを見つけることができませんでした. 本当にありがとう!

4

2 に答える 2

4

このエラーは、存在しない関連付けの has_many がコードに含まれていたときに発生しました (リファクタリングの途中)。そのため、一般的な has_many の設定ミスが原因である可能性もあります。Ruby の動的なスタイルは関連付けがオンデマンドでのみ呼び出されることを意味するため、Ruby/Rails コードは気にしません。しかし、Rails-Admin はプロパティを徹底的に検査するため、リフレクションの問題が発生します。

于 2013-08-21T11:16:48.890 に答える