Sorry Victor, I wasn't clear - the code snippet was for the controller where
you're making the search request. You can try it in script/console as well, but
you'll need to run the search query there as well first :)
--
Pat
On 11/04/2011, at 10:02 PM, Victor Ng Khuen Ping wrote:
> The output in script/console is the one below:
>
> Loading development environment (Rails 2.3.8)
> ** Erubis 2.6.6
> >> puts @trip_days.first.sphinx_attributes
> NoMethodError: You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error occurred while evaluating nil.first
> from (irb):1
> >>
>
>
> Below are the associated models code. You can see that I am not using any
> other mere options yet, just hard coding it to try out first: .merge(:order
> => 'rating_average DESC')
>
>
> 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
> indexes spots.season, :as => :spot_season
> indexes trip.name, :as => :name, :sortable => true
> indexes trip.duration, :as => :duration
> indexes trip.status, :as => :status
> has spots(:id), :as => :spot_id
> has trip(:rating_average), :as => :rating_average
> has trip_id
> end
> end
>
>
> class Trip < ActiveRecord::Base
> belongs_to :user, :counter_cache => true
>
> has_many :spot_trips, :dependent => :destroy
> has_many :spots, :through => :spot_trips
>
> has_many :trip_days, :dependent => :destroy
> has_many :trip_reviews, :dependent => :destroy
> end
>
>
> 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 'relevance'
> order = {:order => '@relevance DESC'}
> 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 = {:order => '@relevance DESC'}
> end
>
> #results = Trip.search params[:keyword], {:conditions => conditions,
> :star => true}.merge(order)
> #@trips = results.paginate(:page => params[:page])
> @trip_days = TripDay.published.search params[:keyword], {
> :conditions => conditions,
> :star => true,
> :group_by => 'trip_id',
> :group_function => :attr,
> :page => params[:page]
> }.merge(:order => 'rating_average DESC')
> @trips = @trip_days.collect { |trip_day| trip_day.trip }
> else
> @trips = Trip.by_status('published').paginate(:all, :page =>
> params[:page], :order => 'created_at DESC')
> end
> end
> end
>
>
>
> Sincerely Yours,
> Victor Ng
>
> Time Zone: (UTC+08:00) Kuala Lumpur, Malaysia
>
>
> On Mon, Apr 11, 2011 at 7:50 PM, Pat Allan <[email protected]> wrote:
> There's no difference... if you're getting results, though, then it *should*
> be working.
>
> What's the output if you do the following after the search:
> puts @trip_days.first.sphinx_attributes
>
> --
> Pat
>
> On 11/04/2011, at 9:42 PM, Victor Ng Khuen Ping wrote:
>
> > Hi Pat,
> >
> > TS 1.3.20
> >
> > There is result, but not sorted. I am suspecting it's not catching any
> > value from "rating_average".
> >
> > What' s the difference between trip(:rating_average) and
> > trip.rating_average?
> >
> > Thank you.
> >
> > Sincerely Yours,
> > Victor Ng
> >
> > Time Zone: (UTC+08:00) Kuala Lumpur, Malaysia
> >
> >
> > On Mon, Apr 11, 2011 at 7:22 PM, Pat Allan <[email protected]>
> > wrote:
> > Hi Victor
> >
> > What version of TS are you using? And does an error happen? No results? Or
> > just not sorted as you'd expect?
> >
> > --
> > Pat
> >
> > On 11/04/2011, at 7:51 PM, Victor wrote:
> >
> > > Hi Pat,
> > >
> > > This is my TripDay model index:
> > >
> > > # 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 spots.season, :as => :spot_season
> > > indexes trip.name, :as => :name, :sortable => true
> > > indexes trip.duration, :as => :duration
> > > indexes trip.status, :as => :status
> > > has spots(:id), :as => :spot_id
> > > #has trip.budget, :as => :budget
> > > #has trip(:created_at), :as => :created_at
> > > has trip(:rating_average), :as => :rating_average
> > > has trip_id
> > >
> > > # set_property :delta => true
> > > end
> > >
> > > But it doesn't work.
> > >
> > > On Apr 11, 10:28 am, Pat Allan <[email protected]> wrote:
> > >> Hi Victor
> > >>
> > >> You'd need to add that column as an attribute in your TripDay index, via
> > >> the trip association.
> > >>
> > >> --
> > >> Pat
> > >>
> > >> On 09/04/2011, at 6:48 PM, Victor wrote:
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>> Hi Pat, using ROR 2.3.8
> > >>
> > >>> I have this in City.rb:
> > >>
> > >>> @trip_days = TripDay.published.search params[:keyword], {
> > >>> :conditions => conditions,
> > >>> :star => true,
> > >>> :group_by => 'trip_id',
> > >>> :group_function => :attr,
> > >>> :page => params[:page]
> > >>> }.merge(:order => 'rating_average DESC')
> > >>> @trips = @trip_days.collect { |trip_day| trip_day.trip }
> > >>
> > >>> How can I tell Rails to get the rating_average from Trip model column,
> > >>> instead of TripDay model? Because the TripDay model does not have
> > >>> rating_average. It's actually Trip model that gets rated.
> > >>
> > >>> Thank you.
> > >>
> > >>> --
> > >>> 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.
> > >
> >
> > --
> > 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.
> >
> >
> >
> > --
> > 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.
>
> --
> 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.
>
>
>
> --
> 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.
--
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.