4

내 사이트의 사용자가 즐겨 찾기 페이지를 만들 수있는 시스템을 만들려고합니다. 그 페이지에는 클럽이나 스포츠의 두 가지 유형이 있습니다.has_many를 사용한 소스 리플렉션 오류 : 통해

사용자 모델 :

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 

스포츠 모델 :

그래서, 나는 4 개 가지 모델, 같은 관련이
class Sport < ActiveRecord::Base 
    .. 

    def to_param 
     slug 
    end 

    .. 

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

    .. 
end 

본질적으로 사용자는 많은 수의 스포츠 또는 즐겨 찾기를 통한 클럽을 소유하고 즐겨 찾기, 스포츠 및 클럽 간의 연관은 다형성을 갖습니다.

실제로 이것은 모두 내가 원하는 방식으로 정확하게 작동하며, 내가 설계 한 전체 시스템이 작동합니다. 그러나 내 사이트에서 Rails_Admin을 사용하고 있는데 세 곳에서 오류가 발생합니다.

  1. 처음으로 대시 보드 (/ admin)를로드 할 때. 페이지를 새로 고치면 제대로 작동합니다.

Rails_Admin에 즐겨 찾기 모델을로드 할 때

  • Rails_Admin
  • 의 사용자 모델을로드 여기 /admin/user (gist)에 오류 메시지입니다. 모든 오류는 유사하며 ActiveRecord::Reflection::ThroughReflection#foreign_key delegated to source_reflection.foreign_key, but source_reflection is nil:을 참조합니다.

    누구나 올바른 방향으로 나를 가리킬 수 있도록이 문제를 해결할 수 있습니까? 나는 모든 것을 조사해 보았고 다른 프로그래머들/전문가들에게 물어 봤지만 아무도 내 모델에서 오류를 발견 할 수 없었다. 정말 고마워!

    답변

    10

    좋아, 글쎄, 나는 마침내 이것을 해결하고 누군가가 다른 사람을 도와 줄 경우를 대비해서 수정본을 게시 할 것이라고 생각했다. (아무도 다른 사람을 찾는 것과 같은 문제는없고 대답은 게시하지 않았다.) .

    다형성이 has_many :through 인 경우 좀 더 많은 구성이 필요합니다. 내 사용자 모델은 다음과 같이 봤어야 : 다형성 has_many :through 협회에 대한 또 다른 질문에

    class User < ActiveRecord::Base 
        .. 
        has_many :favorites 
        has_many :sports, :through => :favorites, :source => :favoritable, :source_type => "Sport" 
        has_many :clubs, :through => :favorites, :source => :favoritable, :source_type => "Club" 
        .. 
    end 
    

    This answer 날이 알아낼 도움 것입니다.

    +0

    추가 디버그 단서 : 이것은 내가 협회의 맞춤 이름을 가지고있을 때 나에게 일어났습니다. 내 User 클래스는 has_many through를 사용하고 사용자 지정 연결 이름으로 source를 지정하고 사용자 지정 연결의 클래스 이름으로 소스 유형을 지정하여 수정했습니다. 그레이트 대답 @ alexlafroscia! – corvuszero

    4

    코드에 has_many가 존재하지 않는 연관 (중간 리팩터)에 포함 된 경우이 오류가 발생했습니다. 그래서 그것은 또한 몇 가지 일반적인 has_many 잘못된 설정으로 인해 발생할 수 있습니다. Ruby의 동적 스타일은 협회가 요청에 의해서만 호출되기 때문에 Ruby/Rails 코드는 결코 신경 쓰지 않습니다. 그러나 Rails-Admin은 속성을 철저히 검사하여 반사 문제를 일으 킵니다.

    관련 문제