我有一个页面,当访问时会显示最近活跃的用户。用户上方是一些过滤选项,例如过滤一个或组合:
我正在为表单使用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
如果我在一个字段中搜索“搜索”参数,我会很好,但我有多个字段,在我的表单上选择菜单。我想如何将该信息传递给我的控制器以过滤搜索结果?
我确信我不是第一个在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服务器日志中我可以看到它们被拾取...现在我只需要一些如何通过思考sphinx来看待它们
更新2 我在define_index块中有性别并且索引位置,因为我似乎需要至少1个字段。
这有助于回归性别:
@users = Profile.search params[:location], :page => params[:page], :per_page => 40, :with => { :gender => [params[:gender]]}
我试图检查位置和性别,它似乎工作,但我会双重检查控制台,因为它在1000英国的英国返回1名女性,这可能是错的但我会双重检查适当地控制和编辑此更新。
答案 0 :(得分: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]}
答案 1 :(得分:0)
正如我所说here,我将尝试解释思考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&lt;的ActiveRecord :: Base的 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哈希值。还有一个重要的Sphinx的@geodist函数叫做。我希望你有一个可读的例子和思考Sphinx gem的最佳参考资料,你可以在这里找到:
我希望你喜欢阅读我的例子和非常清晰的思考斯芬克斯参考。