我在为我的某个模型编制索引时遇到了一些问题。
这是我的模特:
class Model < ActiveRecord::Base
define_index do
# ...
has tracker.open, as: :open, type: :boolean
has source.priority, as: :priority, type: :integer
# ...
end
belongs_to :tracker
belongs_to :source
end
我正在运行它来索引模型:
rake thinking_sphinx:index --trace
这是错误:
undefined method `priority' for #<ThinkingSphinx::Source:0x00000106ae1738>
任何人都知道为什么tracker
关系有效,而不是source
?
我在OS X 10.7中使用Sphinx 0.9.9发行版,Rails 3.1.0.rc5。
更新
在使用此rake任务( reindex 而非 index )时,我在索引部分期间没有出现任何错误。
rake thinking_sphinx:reindex
问题是我现在无法使用优先级字段。 这是搜索时使用的代码:
Model.search(with: {priority: [1]})
这行代码:
has source(:priority)
导致此错误:
ArgumentError: wrong number of arguments (1 for 0) # Produced by the line above.
使用此行:
has source.priority
导致此错误:
NoMethodError: undefined method `priority' for #<ThinkingSphinx::Source:0x00000106b0ff98>
任何人都知道为什么?
更新2
使用rake thinking_sphinx:rebuild
重新编制数据库索引,而不是rake thinking_sphinx:index
和rake thinking_sphinx:reindex
。
答案 0 :(得分:1)
正如列表中所讨论的,您需要使用assoc
方法解决此问题:
has assoc(:source).priority
这里的问题在于,Sphinx索引有源 - 所以Thinking Sphinx自动构建源,因此保留源方法。我真的应该改变这一点,但这会让你在此期间解决它。