2013-05-03 71 views
0

是否有能力通过思考狮身人面像中的关联栏来排序搜索结果?思考狮身人面像与铁轨 - 按协会排列栏

我已经指数定义如下:在控制器中执行

ThinkingSphinx::Index.define :demand, :with => :active_record, :delta => true do 
    indexes client(:name), as: :client, sortable: true 
    has(created_at, updated_at, client_id) 
end 

搜索:

Demand.search(params[:query], order: "#{params[:sort]} #{params[:direction].try(:upcase)}") 

params[order]值是"client.name"params[:direction]要么"asc""desc"

这里是由斯芬克斯生成的查询:

SELECT * FROM `demand_core`, `demand_delta` WHERE MATCH('Test_client @sphinx_internal_class_name (Demand)') AND sphinx_deleted = 0 ORDER BY client.name DESC LIMIT 0, 20 

当我执行搜索,我得到以下错误:

ThinkingSphinx::SyntaxError - sphinxql: syntax error, unexpected CONST_FLOAT, expecting $end near '.name DESC LIMIT 0, 20; SHOW META': 

我一直在寻找一段时间的解决方案,但没能找到。所以问题是如何在我执行搜索后在狮身人面像中应用排序?

回答

1

您需要在排序时使用字段/属性名称 - 所以在您的情况下,它应该是client,而不是client.name。希望改变传递给控制器​​的params [:sort]值不是太棘手。

+0

耶!这工作,非常感谢。也许你应该扩大你的答案,以便它变得明显如何解决这个问题。 – RomanKapitonov 2013-05-03 16:45:25