我知道之前已经提出了一个非常非常相似的问题。如果我想在更多的范围内进行链接,那么该问题的黑客解决方案就不起作用了,所以我在这里再问一遍,并提供更多关于问题来源的信息。
# 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}
所以,我想我可以使用这种语法,即使它不那么漂亮。使这个问题不是特别紧迫。但我肯定很好奇为什么会这样。有什么想法吗?
答案 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,它不会在活动记录中创建任何关系。