Thanks Pat for the advice :)
On Wednesday, August 13, 2014 2:21:37 PM UTC-4, C Wilson wrote:
>
> I have Thinking Sphinx setup and I was wondering how can search based on
> age? For example I should be able to enter "18-25" and it will show me all
> users that fall in that category based on their date of birth attribute
> from Users table.
>
> I have age calculated already based on the users birthday which works
> perfect on their profile.
>
> User.rb:
>
> def age
>> now = Time.now.utc.to_date
>> now.year - birthday.year - ((now.month > birthday.month ||
>> (now.month == birthday.month && now.day >= birthday.day)) ? 0 : 1)
>> end
>
>
>
> Search.rb:
>
> def users
> @users ||= find_users
> end
>
> private
>
> def find_users
> users = User.order(:id)
> users = users.where(gender: gender) if gender.present?
> users = users.where(zip_code: zip_code) if zip_code.present?
> users = users.where(children: children) if children.present?
> users = users.where(religion: religion) if religion.present?
> users = users.where(ethnicity: ethnicity) if ethnicity.present?
> if min_age.present? && max_age.present?
> min = [ min_age, max_age ].min
> max = [ min_age, max_age ].max
> min_date = Date.today - min.years
> max_date = Date.today - max.years
> users = users.where("birthday BETWEEN ? AND ?", max_date, min_date)
> users
> end
> users
> end
> end
>
>
> Indexes:
>
> ThinkingSphinx::Index.define :user, :with => :active_record do
>> indexes name, :as => :user, :sortable => true
>> indexes religion, zip_code, birthday, about_me, career, sexuality,
>> children, user_smoke, user_drink, gender, ethnicity, education, username
>> has created_at, updated_at
>> end
>
>
--
You received this message because you are subscribed to the Google Groups
"Thinking Sphinx" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/thinking-sphinx.
For more options, visit https://groups.google.com/d/optout.