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}

そのため、かなり劣っていますが、その構文をそのまま使用できると思います。この質問を特に緊急ではないようにします。しかし、なぜこれが起こるのか、私は間違いなく興味があります。何かご意見は?

4

2 に答える 2

2

私はあなたが正しいと確信しています(コードに行き詰まることなく-現時点では遅いです)、あなたが設定した方法で動作するはずです。has_many の仮定に問題があると思いますが、has_many :through を期待していません。

GitHub で問題を作成していただけると、さらに調査するように促すことができます。

乾杯

于 2009-09-12T22:08:14.803 に答える
0

Publication モデルの内容は示されていませんが、Publication.first.articles を呼び出すことはできますか? 最初にactive_recordで定義しない限り、スフィンクスはリレーションシップで何もできないと考えています。

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

Article を直接検索することはできますが、sphinx インデックスを問題の publication_id にしているため、アクティブなレコードに関係が作成されません。

于 2009-09-12T18:46:54.747 に答える