2009-09-12 5 views
1

나는 아주 아주 비슷한 질문을 전에 물었다. 이 질문에 대한 해킹 된 해결책은 더 많은 범위에서 연결하려는 경우에는 작동하지 않으므로 문제가 어디에서오고 있는지에 대해 좀 더 많은 정보를 묻습니다.생각하기 스핑크스 : 외래 키 속성 없음

# Relevant code only... 
class Publication < ActiveRecord::Base 
    has_many :issues 
    has_many :articles, :through => :issues 
end 

class Issue < ActiveRecord::Base 
    belongs_to :publication 
    has_many :articles 
end 

class Article < ActiveRecord::Base 
    belongs_to :issue 
    define_index do 
    has issue(:publication_id), :as => :publication_id 
    end 
end 

따라서, 나는 다음과 같은 코드가 작동하는 기대 : 그러나

Publication.first.articles.search 'foobar' 

, 그것은 다음과 같은 오류 반환 :

RuntimeError: Missing Attribute for Foreign Key publication_id 
    from /home/matchu/rails/torch/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/active_record/has_many_association.rb:18:in `search' 

이 암시하는 것을 publication_id 속성이 그 나는 특별히 존재하지 않는다. 그러나 그것은 그렇다.

Article.search :with => {:publication_id => 1} 

그래서이 구문을 사용할 수 있다고 가정합니다. 이 문제는 특히 긴급하지 않습니다. 그러나 나는 이것이 왜 발생하는지에 대해 궁금합니다. 이견있는 사람?

답변

2

나는 코드에 얽매이지 않고 - 당신이 옳다는 것이 늦었습니다. - 어떻게 설정했는지 작동해야합니다. 나는 그것이 has_many에 대한 가정과 has_many : through를 기대하지 않는 것으로 가정한다.

an issue on GitHub을 만들 수 있다면 더 자세히 조사하라고 상기시켜줍니다.

건배

+0

미래의 독자들에게 : Pat이 문제를 해결하고 문제를 해결했습니다. 감사! – Matchu

+0

내 인덱스가 동일한 오류를 던지는 이유에 대한 해결책을 찾기 위해 비틀 거리며 넘어졌습니다. 나는 'Client'의 연관성에 대한 색인을 생성하지 않았으므로 내 색인에'client (: client_id), as : : client_id'가 추가되었습니다 (위의 문제는 TS에서 오랫동안 해결되었습니다). 안내 주셔서 감사합니다! –

0

게시 모델의 내용을 표시하지 않았지만 Publication.first.articles를 호출 할 수도 있습니까? 당신이 active_record에서 먼저 정의하지 않는 한 생각 스핑크스는 관계 아무것도 할 수 없습니다 :

# in Publication.rb 
has_many :articles, :through => :issues 

제 작품에 직접 검색,하지만 당신은 스핑크스 지수 문제의 publication_id을하고 있기 때문에 만, 그것은 어떤 관계를 만들지 않습니다 활성 레코드.

+0

오, 나는 어딘가에서 실패했다. 피곤해서 출판 모델의 코드를 이슈에 넣었습니다. 이제는 모두 엉뚱한 것처럼 보입니다. 1 분 안에 편집 할게. – Matchu

+0

편집이 완료되었습니다. 이제 더 이상 총소리가 들리지 않습니다 :) – Matchu