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 吗?Thinking sphinx 不能对关系做任何事情,除非你先在 active_record 中定义它们:

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

直接在文章上进行搜索,但仅因为您将 sphinx 索引为问题的 publication_id,它不会在活动记录中创建任何关系。

于 2009-09-12T18:46:54.747 回答