思考狮身人面像:缺少外键的属性

时间:2009-09-12 17:37:38

标签: ruby-on-rails ruby thinking-sphinx

我知道之前已经提出了一个非常非常相似的问题。如果我想在更多的范围内进行链接,那么该问题的黑客解决方案就不起作用了,所以我在这里再问一遍,并提供更多关于问题来源的信息。

# 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 个答案:

答案 0 :(得分:2)

我相当肯定(没有陷入代码 - 我现在已经很晚了),你是对的,应该如何设置它。我认为这是对has_many的假设的问题,而不是期待has_many:through。

如果你可以创建an issue on GitHub,那将有助于提醒我进一步调查。

干杯

答案 1 :(得分:0)

您没有显示出版物模型中的内容,但您是否可以调用Publication.first.articles?除非你先在active_record中定义它们,否则思维狮身人面像不能对关系做任何事情:

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

直接搜索文章作品,但只是因为你正在制作sphinx索引问题的publication_id,它不会在活动记录中创建任何关系。