我正在使用pgsearch gem并且我无法让用户按性别搜索我做错了什么?首先,当我点击搜索中的性别下拉时,所有我看到的都是水平的“1,1,1”。当我应该看到男性,女性......我猜这是因为它返回了用户ID?请参阅下面的代码。
search_controller.rb
class SearchesController < ApplicationController
before_filter :authenticate_user!
def index
if params[:search]
@terms = params[:search][:terms] || nil
@min_age = params[:search][:min_age] || nil
@max_age = params[:search][:max_age] || nil
@zipcode = params[:search][:zipcode] || nil
@distance = params[:search][:distance] || nil
@education_id = params[:search][:education_id] || nil
@ethnicity_id = params[:search][:ethnicity_id] || nil
@gender = params[:search][:gender] || nil
@users = User.scoped_by_search(@terms, @min_age, @max_age, @education_id, @ethnicity_id, @gender)
else
@users = User.all
end
end
end
搜索#index.html.erb snippit
<div class="span12">
<label for="search[gender]">Gender:</label>
<%= select_tag 'education', options_from_collection_for_select(User.all, "id", "gender"), class: 'input-large', name: 'search[gender]', :prompt => "Select gender" %>
user.rb代码段相关代码
def self.scoped_by_search(terms, min_age, max_age, education_id, ethnicity_id, gender)
min = min_age.present? ? min_age : 18
max = max_age.present? ? max_age : 100
#TODO find a way to limit the number of users loaded - replace User.all below.
users = terms.present? ? User.search(terms) : User.all
users = users.where('age >= ? and age <= ?', min, max)
users = users.where('education_id = ?', education_id) if education_id.present?
users = users.where('ethnicity_id =?', ethnicity_id) if ethnicity_id.present?
users = users.where('gender =?', gender) if gender.present?
users
end
end
GENDER = {
0 => "Female",
1 => "Male",
}
答案 0 :(得分:0)
这取决于性别在用户模型中的存储方式。如果将女性存储为1并将男性存储为0,则您的下拉只会显示这些值。
代码段
GENDER = {
0 => "Female",
1 => "Male",
}
没有在任何地方使用。如果您想在整个应用程序中使用男性和女性,那么将它们存储起来是有道理的。无论出于何种原因,您需要将性别存储为1和0,您可以覆盖用户模型中的访问者,如
def gender
case self.read_attribute(:gender)
when '0'
'Female'
when '1'
'Male'
else
nil
end
end
end