我有一个页面,当访问时会显示最近活跃的用户。上面的用户是一些过滤选项,例如通过一个或组合进行过滤:
- 位置
- 性别
- 性偏好
- 年龄范围
- 国家
我正在为我的表单使用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。还有一个重要的狮身人面像的"地球学家"函数叫做。我希望你有可读的例子和思考狮身人面像宝石的最佳参考,你可以在这里找到:
- 思考狮身人面像参考
- 关于索引的部分
- 关于搜索的部分
- 关于大地测量学家的章节
我希望你喜欢阅读我的例子和非常清晰的思考狮身人面像参考。