Thank you very much Pat. I understand you have gone very far to help
me.

Will make another donation again when I am able in future. Thank you
again.

On Nov 11, 11:42 am, Pat Allan <[email protected]> wrote:
> Hi Victor
>
> I'm afraid I'm at a loss as to what the problem is... as far as I can tell 
> (though it's a little difficult without the full site's code in front of me) 
> there's nothing wrong in your indexes or controller code.
>
> Sorry - I wish I could help more, but I just don't know what the cause of 
> these problems are.
>
> --
> Pat
>
> On 10/11/2010, at 5:08 PM, Victor wrote:
>
> > Hi Pat,
>
> > Still couldn't get it working after multiple trial-error.
>
> > Maybe I can just set the search result to sort by 'rating_average
> > DESC', that's all. Tried numerous places too couldn't get it right.
> > Where should I put it?
>
> > Am removing the sorting filter.
>
> > Thanks.
>
> > On Nov 9, 1:05 am, Victor <[email protected]> wrote:
> >> Hi Pat,
>
> >> Thanks for the heads-up.
>
> >> I have played around, and got the trip.name and trip.duration working,
> >> but not the order (rating_average, created_at). I have tried indexing
> >> both "rating_average" and "created_at", but couldn't get it work.
>
> >> The following configuration works for spots (all), trip name, trip
> >> duration.
>
> >> trip_day.rb
> >> ===========
> >> # ThinkingSphinx Index
> >>   define_index do
> >>     indexes spots.name, :as => :spot_name
> >>     indexes spots.city, :as => :spot_city
> >>     indexes spots.state, :as => :spot_state
> >>     indexes spots.country, :as => :spot_country
> >>     indexes trip.name, :as => :name
> >>     indexes trip.duration, :as => :duration
> >>     has trip.budget, :as => :budget
> >>     has trip.created_at, :as => :created_at
> >>     has trip.rating_average, :as => :rating_average
> >>     has trip_id
> >>   end
>
> >> trip.rb
> >> ========
> >> # ThinkingSphinx Index
> >>   define_index do
> >>     indexes name
> >>     indexes duration
> >>     #indexes spots.name, :as => :trip_spot_name
> >>     #indexes spots.city, :as => :trip_spot_city
> >>     #indexes spots.state, :as => :trip_spot_state
> >>     #indexes spots.country, :as => :trip_spot_country
> >>     has budget, created_at, rating_average
> >>   end
>
> >> On Nov 8, 8:25 pm, Pat Allan <[email protected]> wrote:
>
> >>> Hi Victor
>
> >>> I think duration and name should be fields (given that's what they were 
> >>> originally) - so use 'indexes' instead of 'has'. This will ensure they're 
> >>> actually treated as string data for search queries.
>
> >>> --
> >>> Pat
>
> >>> On 08/11/2010, at 5:12 PM, Victor wrote:
>
> >>>> Hey Pat,
>
> >>>> I'm suspecting TripDay couldn't index using this:
>
> >>>>  has trip.budget, :as => :budget
> >>>>  has trip.created_at, :as => :created_at
> >>>>  has trip.rating_average, :as => :rating_average
>
> >>>> The duration that works mentioned above, could be directly from
> >>>> indexes of Trip instead.
>
> >>>> On Nov 6, 11:25 pm, Victor <[email protected]> wrote:
> >>>>> Almost there, Pat, almost there!
>
> >>>>> trip_day.rb
> >>>>> ===========
>
> >>>>> class TripDay < ActiveRecord::Base
> >>>>>   belongs_to :trip
>
> >>>>>   has_many :trip_day_spots
> >>>>>   has_many :spots, :through => :trip_day_spots
>
> >>>>>   # ThinkingSphinx Index
> >>>>>   define_index do
> >>>>>     indexes spots.name, :as => :spot_name
> >>>>>     indexes spots.city, :as => :spot_city
> >>>>>     indexes spots.state, :as => :spot_state
> >>>>>     indexes spots.country, :as => :spot_country
> >>>>>     has trip_id
> >>>>>     has trip.name, :as => :name
> >>>>>     has trip.duration, :as => :duration
> >>>>>     has trip.budget, :as => :budget
> >>>>>     has trip.created_at, :as => :created_at
> >>>>>     has trip.rating_average, :as => :rating_average
> >>>>>   end
> >>>>> end
>
> >>>>> trips_controller.rb
> >>>>> ============
>
> >>>>> class TripsController < ApplicationController
> >>>>>   before_filter :require_user, :except => [:show, :index]
>
> >>>>>   def index
> >>>>>     if params[:filter] == 'on'
> >>>>>       country = params[:country] == 'All' ? {} : {:spot_country =>
> >>>>> params[:country]}
> >>>>>       duration = params[:days].blank? ? "" : params[:days]
>
> >>>>>       if !duration.blank? && country
> >>>>>         conditions = {:duration => duration}.merge(country)
> >>>>>       elsif !duration.blank? && country.blank?
> >>>>>         conditions = {:duration => duration}
> >>>>>       else country && duration.blank?
> >>>>>         conditions = country
> >>>>>       end
>
> >>>>>       keyword = params[:keyword].blank? ? "" : params[:keyword]
>
> >>>>>       case params[:order]
> >>>>>       when 'date_descend'
> >>>>>         order = {:order => 'created_at DESC'}
> >>>>>       when 'date_ascend'
> >>>>>         order = {:order => 'created_at ASC'}
> >>>>>       when 'rating_descend'
> >>>>>         order = {:order => 'rating_average DESC'}
> >>>>>       when 'rating_ascend'
> >>>>>         order = {:order => 'rating_average ASC'}
> >>>>>       when 'budget_dscend'
> >>>>>         order = {:order => 'budget DESC'}
> >>>>>       when 'budget_ascend'
> >>>>>         order = {:order => 'budget ASC'}
> >>>>>       else
> >>>>>         order = {}
> >>>>>       end
>
> >>>>>       #results = Trip.search params[:keyword], {:conditions =>
> >>>>> conditions, :star => true}.merge(order)
> >>>>>       #...@trips = results.paginate(:page => params[:page])
> >>>>>       @trip_days = TripDay.search(params[:keyword], {
> >>>>>           :conditions     => conditions,
> >>>>>           :star           => true,
> >>>>>           :group_by       => 'trip_id',
> >>>>>           :group_function => :attr,
> >>>>>           :page           => params[:page]
> >>>>>         }.merge(order))
> >>>>>       @trips = @trip_days.collect { |trip_day| trip_day.trip }
> >>>>>     else
> >>>>>       @trips = Trip.paginate(:all, :page => params[:page], :order =>
> >>>>> 'created_at DESC')
> >>>>>     end
> >>>>>   end
> >>>>> end
>
> >>>>> Trip's index.html.erb, I have changed:
>
> >>>>> From
> >>>>> <%= pluralize @trips.total_entries, 'trip' %></span>
> >>>>> To
> >>>>> <%= pluralize @trip_days.total_entries, 'trip' %></span>
>
> >>>>> From
> >>>>> <%= will_paginate @trips %>
> >>>>> To
> >>>>> <%= will_paginate @trip_days %>
>
> >>>>> Other attributes in Trip's index.html.erb refers directly to Trip,
> >>>>> with this tag: <% @trips.each do |trip| %> which works fine.
>
> >>>>> Other filter such as trip.duration, spot.address, spot.name all worked
> >>>>> fine.
>
> >>>>> Now one last problem here:
> >>>>> I can't filter by the "trip.name", and can't sort by "rating_average"
> >>>>> and "created_at" even though I have put them in "trip_day.rb".
>
> >>>>> On Nov 6, 7:21 am, Pat Allan <[email protected]> wrote:
>
> >>>>>> Ah, I removed the pagination with the collect... of course.
>
> >>>>>> Probably best to keep the trip_day objects separate, and use that for 
> >>>>>> pagination:
>
> >>>>>>   @trip_days = TripDay.search(params[:keyword], {
> >>>>>>     :conditions     => conditions,
> >>>>>>     :star           => true,
> >>>>>>     :group_by       => 'trip_id',
> >>>>>>     :group_function => :attr,
> >>>>>>     :page           => params[:page]
> >>>>>>   }.merge(order))
> >>>>>>   @trips = @trip_days.collect { |trip_day| trip_day.trip }
>
> >>>>>> And then, you can use @trips for looping through results, and 
> >>>>>> @trip_days for pagination information (ie: total_entries).
>
> >>>>>> However, this doesn't get around the attribute issue. You could pull 
> >>>>>> the attributes all into the TripDay index:
>
> >>>>>>   has trip.budget, :as => :budget
> >>>>>>   has trip.created_at, :as => :created_at
> >>>>>>   has trip.rating_average, :as => :rating_average
>
> >>>>>> This is a pretty massive workaround just because the Trip index isn't 
> >>>>>> working as we'd like, though...
>
> >>>>>> --
> >>>>>> Pat
>
> >>>>>> On 05/11/2010, at 5:21 PM, Victor wrote:
>
> >>>>>>> Argh, it was in the search function you added:
>
> >>>>>>> @trips = TripDay.search(params[:keyword], {
> >>>>>>>    :conditions     => conditions,
> >>>>>>>    :star           => true,
> >>>>>>>    :group_by       => 'trip_id',
> >>>>>>>    :group_function => :attr,
> >>>>>>>    :page           => params[:page]
> >>>>>>>  }.merge(options)).collect { |trip_day| trip_day.trip }
>
> >>>>>>> I changed the last line .merge(options) to .merge(order) and I "think"
> >>>>>>> it is going there now! Great.
>
> >>>>>>> Now when the app tries to render the index.html.erb to show the search
> >>>>>>> results, it gives me this:
>
> >>>>>>> ActionView::TemplateError (undefined method `total_entries' for
> >>>>>>> []:Array) on line #11 of app/views/trips/index.html.erb:
> >>>>>>> 8:           <% if params[:filter] == 'on' %>
> >>>>>>> 9:             <h1>
> >>>>>>> 10:               Showing <span id="total-results" class="filtered">
> >>>>>>> 11:                                <%= pluralize 
> >>>>>>> @trips.total_entries, 'trip' %></span>
> >>>>>>> 12:               <% if !params[:keyword].blank? %>
> >>>>>>> 13:                 on <span id="keywords" class="filtered"><%=
> >>>>>>> params[:keyword] %></span>
> >>>>>>> 14:               <% end %>
>
> >>>>>>> I think this is probably because it is searching in TripDay and there
> >>>>>>> are no attributes found in TripDay.
>
> >>>>>>> What should I do to display the attributes from Trip instead of
> >>>>>>> TripDay? Because this happens to my wildcard search too.
>
> >>>>>>> On Nov 5, 2:05 pm, Pat Allan <[email protected]> wrote:
> >>>>>>>> What about in your controller?
>
> >>>>>>>> --
> >>>>>>>> Pat
>
> >>>>>>>> On 05/11/2010, at 5:01 PM, Victor wrote:
>
> >>>>>>>>> When I performed a search, the following 500 occured:
>
> >>>>>>>>> Processing TripsController#index (for 115.164.60.198 at 2010-11-05
> >>>>>>>>> 13:50:19) [GET]
> >>>>>>>>>  Parameters: {"country"=>"All", "days"=>"", "action"=>"index",
> >>>>>>>>> "filter"=>"on", "order"=>"date_descend", "controller"=>"trips",
> >>>>>>>>> "keyword"=>"mid valley"}
>
> >>>>>>>>> NameError (undefined local variable or method `options' for
> >>>>>>>>> #<TripsController:0xb693d44>):
>
> >>>>>>>>> I did not have any variable "options" anywhere in my trip.rb, or
> >>>>>>>>> Trip's index.html.erb.
>
> >>>>>>>>> On Nov 4, 9:37 pm, Victor <[email protected]> wrote:
> >>>>>>>>>> Sorry Pat, we posted at the same time. Will get back to you when I
> >>>>>>>>>> have tried that. Thanks.
>
> >>>>>>>>>> On Nov 4, 9:29 pm, Victor
>
> ...
>
> read more »

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