Мышление Сфинкса: Отсутствует атрибут внешнего ключа - PullRequest
1 голос
/ 12 сентября 2009

Я знаю, очень, очень похожий вопрос задавался ранее. Хакерское решение этого вопроса не сработает, если я захочу пообщаться в большем количестве областей, поэтому я снова спрашиваю здесь, с немного большей информацией о том, откуда возникла проблема.

# 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'

Похоже, это означает, что указанный мной атрибут публикации_идентификатора не существует. Тем не менее, это так.

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

Итак, я полагаю, что могу просто использовать этот синтаксис, хотя он значительно менее симпатичен. Делать этот вопрос не особенно актуальным. Но мне определенно любопытно, почему это происходит. Есть мысли?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2009

Я совершенно уверен (не застревая в коде - уже поздно, где я сейчас нахожусь), что вы правы, все должно работать так, как вы его настроили. Я предполагаю, что это проблема с допущениями относительно has_many, а не ожиданием has_many: through.

Если бы вы могли создать проблему на GitHub , это напомнит мне продолжить расследование.

Приветствия

0 голосов
/ 12 сентября 2009

Вы не показали, что находится в вашей модели публикации, но можете ли вы даже вызвать Publication.first.articles? Думающий сфинкс не может ничего сделать с отношениями, если вы сначала не определите их в active_record:

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

Поиск непосредственно по статье работает, но только потому, что вы делаете sphinx index выпуском публикации_id, он не создает никаких связей в активной записи.

...