0

我有一個Rails應用程序,其中我使用Thinking-Sphinx進行搜索,ActsAsTaggableOn進行標記。我希望能夠在我的搜索查詢中包含當前選定的標籤。我嘗試了以下,但沒有得到它的工作。使用ActsAsTaggableOn思考獅身人面像標籤搜索

在我的控制器:

def show 

    @team_tags = @team.ideas.tag_counts_on(:tags) 

    if params[:tag] 
    @ideas = @team.ideas.search(params[:search], :conditions => { tags: "tag" }) 
    else 
    @ideas = @team.ideas.search(params[:search]) 
    end 

end 

我爲我的Idea模型索引:

ThinkingSphinx::Index.define :idea, :with => :real_time do 
    [...] 
    indexes tags.name, :as => :tags 

    has user_id, type: :integer 
    has team_id, type: :integer 
    [...] 
end 

這給了我下面的錯誤他:

ActionView::Template::Error (index idea_core: query error: no field 'tags' found in schema 

當我有一個標籤選擇我URLs是這樣的:

/teams/1/tags/tag 

那麼,我應該怎麼做才能讓Thinking-SphinxActsAsTaggableOn一起工作?

+0

您使用過rake ts:start和rake ts:index http://pat.github.io/thinking-sphinx/quickstart.html –

+0

@ThanatosSama是的,我已經完成了。 – Anders

回答

1

對於您的字段而言,您只能使用SQL支持的索引而不是實時索引。

在你的情況,你需要做的是建立在你的模型的方法,它返回所有的標籤名稱爲一個字符串:

def tag_names 
    tags.collect(&:name).join(' ') 
end 

然後你可以參考,在您的索引定義:

indexes tag_names, :as => :tags 

一旦你做到了這一點,你需要重新生成獅身人面像索引,因爲你已經改變了結構:rake ts:regenerate

+0

確實有效嗎?來自思維獅身人面像文檔(http://freelancing-gods.com/thinking-sphinx/indexing.html):「你不能引用模型方法 - Sphinx直接與你的數據庫對話,而Ruby在這一點上不會被加載。」 – Miotsu

+0

@Miotsu文檔指的是SQL支持的索引(使用':with =>:active_record'),但這裏問題中的索引使用實時索引(':with =>:real_time'),並且在那種情況下你只能*參考模型方法。 – pat

+0

現在我明白了,謝謝。 – Miotsu

相關問題