2009-09-12 57 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

對未來的讀者:帕特解決了這個問題,從而解決了這個問題。謝謝! – Matchu 2009-09-14 19:48:18

+0

我偶然發現了這個尋找解決方案,爲什麼我的索引拋出相同的錯誤;我沒有索引'Client'的關聯,因此在我的索引中添加了'client(:client_id),作爲:: client_id'(因爲上面的問題早已在TS中解決了)。感謝您的指導! – 2013-03-15 14:14:30

0

您沒有顯示出版物模型中的內容,但是您甚至可以調用Publication.first.articles?除非你在active_record首先定義他們思考獅身人面像不能做任何的關係:

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

直接在文章搜索工作,但僅僅是因爲你正在獅身人面像索引問題的publication_id,它不會創建任何關係活躍的紀錄。

+0

哦,我知道我失敗了。我很累,並將發佈模型的代碼放入問題中。現在看起來都像是廢話。我會在一分鐘內編輯它。 – Matchu 2009-09-12 20:03:06

+0

已編輯。現在它不再是完全廢話:) – Matchu 2009-09-12 20:04:31