So everything is working but the 2 :with defined are clashing.. only
one works at a time. if I comment out one then the other works and I
can get results shown. Right now the way things are only age filtering
works and if I comment out the :with for :age then the other filters
work. I need a way to combine them all.

If I do this:

:with => filters, { :age => min_age..max_age }
or
:with => { filters, :age => min_age..max_age }

Then age filtering doesn't work.

My full code is shown below.




class BrowsersController < ApplicationController
  def index
        @default_image = "/assets/default_avatar.jpg"
    filters = {} # creates empty hash to pass in params.. i think any
way
    filters[:country]           = params[:country].to_i if
params[:country].present? # self explanitory
    filters[:gender]            = params[:gender].to_i if
params[:gender].present? # self explanitory
    filters[:ethnicity]         = params[:ethnicity].to_i if
params[:ethnicity].present? # self explanitory
    filters[:marital_status]    = params[:marital_status].to_i if
params[:marital_status].present? # self explanitory
    filters[:sexual_preference] = params[:sexual_preference].to_i if
params[:sexual_preference].present? # self explanitory





    # checks if there are params set and if there aren't then defaults
are given. This basically returns all registered users
    if params[:min_age].present?
    min_age = params[:min_age].to_i
    else
    min_age = 1
    end
    if params[:max_age].present?
    max_age = params[:max_age].to_i
    else
    max_age = 107
    end




    # error message for age range selection
    if params[:max_age].to_i < params[:min_age].to_i
    flash.now[:error] = "Max age can't be greater than min age"
    end








        @users = Profile.search params[:location],  # search with params of
location field in form
                                       :page => params[:page], # will
paginate setting
                                       :per_page => 20, # will paginate
setting
                                       :with => filters,
                                   :with => { :age =>
min_age..max_age }

  end
end



On Jan 30, 9:07 pm, GregoryHouse <[email protected]> wrote:
> Hi Pat I seem to have got this working and have tested with several
> temp ages in which I will put the params info. Anyway this all seems
> to work only when I define :with separately. When I try to add
> the :age => min_age..max_age after the filters variable with a comma
> it doesn't have any effect. I even tried putting both in a hash but
> when I do that I get an  error.
>
> I'm happy it's working but is it wrong to define :with twice?
>
> class BrowsersController < ApplicationController
>   def index
>         @default_image = "/assets/default_avatar.jpg"
>     filters = {} # creates empty hash to pass in params.. i think any
> way
>     filters[:country]           = params[:country].to_i if
> params[:country].present? # self explanitory
>     filters[:gender]            = params[:gender].to_i if
> params[:gender].present? # self explanitory
>     filters[:ethnicity]         = params[:ethnicity].to_i if
> params[:ethnicity].present? # self explanitory
>     filters[:marital_status]    = params[:marital_status].to_i if
> params[:marital_status].present? # self explanitory
>     filters[:sexual_preference] = params[:sexual_preference].to_i if
> params[:sexual_preference].present? # self explanitory
>     min_age = 78
>     max_age = 88
>
>         @users = Profile.search params[:location],  # search with params of
> location field in form
>                                        :page => params[:page], # will
> paginate setting
>                                        :per_page => 20, # will paginate
> setting
>                                        :with => filters,
>                                    :with => { :age =>
> min_age..max_age }
>
>   end
> end
>
> On Jan 30, 1:30 pm, "Pat Allan" <[email protected]> wrote:> Ages are 
> difficult, because Sphinx stores times and dates as timestamps from Unix's 
> epoch (1st Jan 1970) - so you can't store times earlier than that (Sphinx has 
> no concept of signed integers either, annoyingly, so negative values won't 
> get you anywhere).
>
> > You could calculate your own timestamp value with a different epoch, and 
> > store it as an integer - indeed, you could do it as number of days instead 
> > of number of seconds since a given point. Something to ponder, at least.
>
> > --
> > Pat
>
> > On 30/01/2012, at 11:52 PM, GregoryHouse wrote:
>
> > > Hi Pat,
>
> > > I've decided to rebuild my country select and add values as integers
> > > to be stored in my db. I think that's much easier and efficient. Also
> > > in future I'll be able to add a countries table if I need to and still
> > > be able to use the stored integers to reference things in the
> > > countries table.
> > > All I have to do after this country select is done is age filtering.
> > > That one seems tricky as I'll have to write some code to work out a
> > > users age from their birthday then use that age in the filter some how
>
> > > On Jan 30, 12:37 pm, "Pat Allan" <[email protected]> wrote:
> > >> Hi Gregory
>
> > >> You can search on specific fields - which may do the job for the country 
> > >> string data. The one catch there is if it's full country names, some 
> > >> countries may match as part of others (Democratic Republic of Congo vs 
> > >> Republic of Congo is one that comes to mind). It could be better to 
> > >> store and search on the country codes instead? The carmen gem may help 
> > >> with this.
>
> > >> That said, your current setup (as listed in your email) may work fine - 
> > >> but you should be using :conditions, not :conditions_all.
>
> > >> Cheers
>
> > >> --
> > >> Pat
>
> > >> On 30/01/2012, at 1:28 PM, GregoryHouse wrote:
>
> > >>> Having a bit of an issue with country select.
>
> > >>> **What I'm trying to do:**
>
> > >>> I'm trying to add an extra filter to my /browser page to allow users
> > >>> to filter results by a country from a select drop down menu also.
>
> > >>> **So far filtering by:**
>
> > >>> texted typed in location <br />
> > >>> gender <br />
> > >>> ethnicity <br />
> > >>> marital status <br />
> > >>> sexual preference <br />
>
> > >>> all work fine.
>
> > >>> Filtering works for attributes that are/were stored as integers. Take
> > >>> a look at my view form and you'll see I have a few select menus and
> > >>> these have 'Strings' that are represented by integer values:
>
> > >>> **My view:**
>
> > >>>      <%= form_tag browsers_path, :method => 'get' do %>
> > >>>          <p>
> > >>>            Location: <%= text_field_tag :location, params[:location]
> > >>> %>
> > >>>        <br />
> > >>>            Country: <%= country_select(:profile, :country, [ "United
> > >>> Kingdom", "France", "Germany" ], :prompt => "Select Country") %>
> > >>>        <br />
> > >>>            Gender: <%= select_tag :gender,
> > >>>                       options_for_select([["Select", nil],
> > >>>                          ["Male", 1],
> > >>>                         ["Female", 2]], params[:gender]) %>
> > >>>        <br />
> > >>>            Ethnicity: <%= select_tag :ethnicity,
> > >>>                       options_for_select([["Select", nil],['Black',
> > >>> 1 ],['White / Caucasian', 2 ],['European', 3 ],['Asian', 4 ],
> > >>> ['Indian', 5 ],['Middle Eastern', 6 ],['Native American', 7 ],
> > >>> ['Hispanic', 8 ],['Mixed Race', 9 ],['Other Ethnicity', 10 ]],
> > >>> params[:ethnicity]) %>
> > >>>        <br />
>
> > >>>            Marital status: <%= select_tag :marital_status,
> > >>>                       options_for_select([[' Select', nil],['Single',
> > >>> 1 ],['Dating', 2 ],['In relationship', 3 ],['Married', 4 ],['Living
> > >>> Together', 5 ],['Divorced', 6 ],['Separated', 7 ],['Widowed', 8 ]],
> > >>> params[:marital_status]) %>
> > >>>        <br />
> > >>>            Sexual preference: <%= select_tag :sexual_preference,
> > >>>                       options_for_select([[' Select', nil],
> > >>> ['Straight', 1 ],['Gay', 2 ],['Bi-sexual', 3 ]],
> > >>> params[:sexual_preference]) %>
> > >>>        <br />
> > >>>            <%= submit_tag "Search", :name => nil %>
> > >>>          </p>
> > >>>          <% end %>
>
> > >>> Everything works fine except for country select because it is stored
> > >>> as a string and has no integer value. For thinking sphinx attributes I
> > >>> think they have to be integers.. well from what I read anyway.
>
> > >>> Anyway a fix for would be to create a country select list containing
> > >>> an array of countries with values and then use a select tag in the way
> > >>> I've done with gender, marital status etc. This would take some time
> > >>> though and I would have to make modifications to previous work and
> > >>> populate my db with sample data again.
>
> > >>> **1)** I'm wondering if theres a quick way to do what I'm trying to do
> > >>> working with what I have now?
>
> > >>> **2)** Should I have been storing countries as integers rather than
> > >>> strings in the first place?
> > >>> what I'm asking is if that would be better practice seeing as less
> > >>> space would be taken up in the database using integers rather than
> > >>> strings..
>
> > >>> **3)** country_select seems to want a model to talk to "profile". This
> > >>> was fine when I was working on profile with my profile model updating
> > >>> the db, with things a user had to fill out their profile but now this
> > >>> is not needed.
>
> > >>> My model:
>
> > >>>    class Profile < ActiveRecord::Base
>
> > >>>      belongs_to :user
> > >>>      belongs_to :photo
>
> > >>>      # thinking sphinx
> > >>>      define_index do
>
> > >>>        indexes location
> > >>>        indexes country
> > >>>    has gender
> > >>>    has ethnicity
> > >>>    has marital_status
> > >>>    has sexual_preference
> > >>>    has birthday
>
> > >>>      end
>
> > >>> My controller:
>
> > >>>    class BrowsersController < ApplicationController
> > >>>      def index
> > >>>            @default_image = "/assets/default_avatar.jpg"
> > >>>        filters = {} # creates empty hash to pass in params.. i think
> > >>> any way
> > >>>        filters[:gender]            = params[:gender].to_i if
> > >>> params[:gender].present? # self explanitory
> > >>>        filters[:ethnicity]         = params[:ethnicity].to_i if
> > >>> params[:ethnicity].present? # self explanitory
> > >>>        filters[:marital_status]    = params[:marital_status].to_i if
> > >>> params[:marital_status].present? # self explanitory
> > >>>        filters[:sexual_preference] = params[:sexual_preference].to_i
> > >>> if params[:sexual_preference].present? # self explanitory
> > >>>        #filters[:birthday]          =
> > >>> (params[:birthday].to_time.to_i..Time.now.to_i)
>
> > >>>            @users = Profile.search params[:country],  # search with 
> > >>> params
> > >>> of location field in form
> > >>>                                           :page => params[:page], # will
> > >>> paginate setting
> > >>>                                           :per_page => 20, # will 
> > >>> paginate
> > >>> setting
> > >>>                                           :conditions_all => { :country 
> > >>> =>
> > >>> params[:country]},
> > >>>                                           :with => filters
>
> > >>>      end
> > >>>    end
>
> > >>> Kind regards
>
> > >>> --
> > >>> You received this message because you are subscribed to the Google 
> > >>> Groups "Thinking Sphinx" group.
> > >>> To post to this group, send email to [email protected].
> > >>> To unsubscribe from this group, send email to 
> > >>> [email protected].
> > >>> For more options, visit this group 
> > >>> athttp://groups.google.com/group/thinking-sphinx?hl=en.
>
> > > --
> > > You received this message because you are subscribed to the Google Groups 
> > > "Thinking Sphinx" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to 
> > > [email protected].
> > > For more options, visit this group 
> > > athttp://groups.google.com/group/thinking-sphinx?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en.

Reply via email to