PG按性别搜索

时间:2013-12-21 04:21:35

标签: ruby-on-rails ruby-on-rails-4 pg psql

我正在使用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",
  }

1 个答案:

答案 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