在我的Rails 4应用程序中,我有以下模型:
' AgencyGroup'
has_many :group_agencies
has_many :agencies, :through => :group_agencies
我保留的地方'令牌'字段
'机构'模型
has_many :group_agencies
has_many :agency_groups, :through => :group_agencies
has_many :advertisements
'广告'模型
belongs_to :agency
我使用Thinking Sphinx并且它确实很有效但现在我有了新的要求来过滤'广告'通过AgencyGroup令牌字段。
基本上我需要查找带有一些参数的广告,但仅限于代理商组中包含已发布令牌的代理商。
if params[:search]
@results = Advertisement.search Riddle::Query.escape(params[:search]), :star => true, :page => params[:page], :per_page => 6
end
为了获得结果,我运行http查询,如下所示:
http://api.localhost.local:3000/v1/advertisements?token=JHW_tdXn5g-vQY1f_ZzLuw&search=Nissim
我失踪了什么?如何在TS中使用模型之间的关系?
答案 0 :(得分:0)
我认为这里最好的方法包括几个步骤:
第1步:在广告索引中添加代理商组ID作为属性。如果你正在使用SQL支持的索引(:with => :active_record
),它就是一个单行:
has agency.group_agencies.agency_group.id, :as => :agency_group_ids
如果你正在使用实时索引,那么你想要一个广告中的方法返回所有这些ID:
def agency_group_ids
agency.agency_group_ids
end
您的属性定义将如下所示:
has agency_group_ids, :type => :integer, :multi => true
第2步:因为您已经更改了索引结构,所以不要忘记重建索引:
# for SQL-backed indices:
rake ts:rebuild
# or, for real-time indices
rake ts:regenerate
第3步:在您的控制器中,找到给定令牌的代理商组:
agency_group = AgencyGroup.find_by :token => params[:token]
第4步:最后,在搜索电话中使用该代理机构的ID:
@results = Advertisement.search Riddle::Query.escape(params[:search]),
:star => true,
:page => params[:page],
:per_page => 6,
:with => {:agency_group_ids => agency_group.id}