将多个参数传递给thinking_sphinx搜索方法是绝对不可能的



我有一个页面,当访问时会显示最近活跃的用户。上面的用户是一些过滤选项,例如通过一个或组合进行过滤:

  • 位置
  • 性别
  • 性偏好
  • 年龄范围
  • 国家

我正在为我的表单使用form_tag助手。我的问题是将这些参数中的每一个传递给我的控制器:

class BrowsersController < ApplicationController
  def index
    @default_image = "/assets/default_avatar.jpg"
    @users = Profile.search params[:search], :page => params[:page], :per_page => 26
  end
end

如果我用一个带有参数"Search"的字段进行搜索,我会很好,但我有多个字段,请在我的表单上选择菜单。我该如何将该信息传递给我的控制器以过滤搜索结果?

我确信我不是第一个在ruby on rails 中使用搜索过滤的人

<%= form_tag browsers_path, :method => 'get' do %>
  <p>
    Location: <%= text_field_tag :location %><br />
    Gender: <%= select_tag :gender, 
               options_for_select([["Select", nil], 
                  ["Male", 1], 
                 ["Female", 2]]) %>
<br />
    <%= submit_tag "Search", :name => nil %>
  </p>
  <% end %>
<br />

问候

更新

@users = Profile.search 'HERE IS WHERE THE POWER LIES', :page => params[:page], :per_page => 20, :conditions_all => { :gender => params[:gender], :location => params[:location]}

我使用:conditions_all来获取字段参数,在rails服务器日志中,我可以看到它们正在被提取。。现在我只需要知道如何通过思考狮身人面像来看到它们

更新2我在defineindex块和索引位置中有性别,因为我似乎至少需要一个字段。

这项工作旨在回归性别:

@users = Profile.search params[:location], :page => params[:page], :per_page => 40, :with => { :gender => [params[:gender]]}

我试着检查了位置和性别,这似乎有效,但我会在控制台中再次检查,因为它在英国返回了1000名女性中的1名,这可能是错误的,但我将在控制台中重新检查并适当编辑此更新。

我不太确定:conditions_all是从哪里得到的——如果你在处理字段,那么:conditions就是你想要的:

@users = Profile.search 'HERE IS WHERE THE POWER LIES',
  :page       => params[:page],
  :per_page   => 20,
  :conditions => {:gender => params[:gender], :location => params[:location]}

但是,听起来你把性别作为一个属性,而不是一个字段——所以,你想过滤它:

@users = Profile.search 'HERE IS WHERE THE POWER LIES',
  :page       => params[:page],
  :per_page   => 20,
  :conditions => {:location => params[:location]},
  :with       => {:gender => params[:gender]}

正如我在这里所说,我将尝试解释一些Thinking Sphinx和我建议的解决您问题的方法。

假设您有以下配置文件模型:

# == Schema Information
#
# Table name: access_number_campaigns
#
#  id               :integer
#  latitude         :float
#  longitude        :float
#  created_at       :datetime
#  updated_at       :datetime
class Profile < ActiveRecord::Base
  GENDER = {1 => "Male", 2 => "Female"}
  belongs_to :country      
  has_and_belongs_to_many :sexual_preferences
  has_and_belongs_to_many :age_ranges
end

你可能有这些模型:class SexualPreference<ActiveRecord::基本has_and_belongs_to_many:配置文件结束

class AgeRange < ActiveRecord::Base
  has_and_belongs_to_many :profiles
end
class Country < ActiveRecord::Base
  has_many :profiles
end

然后,您可以在以下模式中定义ThinkingSphinx索引:

# within model Profile 
define_index
  has "RADIANS(latitude)",  :as => :latitude,  :type => :float
  has "RADIANS(longitude)", :as => :longitude, :type => :float
  has sexual_preferences(:id), :as => :sexual_preference_ids
  has age_ranges(:id), :as => :age_range_ids
  has country_id, :type => :integer
  has gender, :type => :integer
end

您可以创建一个类来构建以下ThinkingSphinx查询,以处理所有需要的关联和属性:

Profile.search "your keywords", :page => 1, :per_page => 10, :with => {"@geodist" => 0.0..NUMBER_OF_METERS, :with_all=>{:sexual_preference_ids=>["1", "2", "3"], :age_range_ids=>["1", "2", "3"], :country_id => ["123"], :gender => ["1"]} }

您可以在上面看到一个Thinking Sphinx搜索查询,其中包含:with和:with_all hashes。还有一个重要的狮身人面像的"地球学家"函数叫做。我希望你有可读的例子和思考狮身人面像宝石的最佳参考,你可以在这里找到:

  • 思考狮身人面像参考
    • 关于索引的部分
    • 关于搜索的部分
    • 关于大地测量学家的章节

我希望你喜欢阅读我的例子和非常清晰的思考狮身人面像参考。

相关内容

最新更新