Sphinx's id is different to the model's id. However, you can filter using
sphinx_internal_id instead:
filters[:sphinx_internal_id] = rolepid
Unrelated, but the code in your controller can be simplified:
if params[:active].present?
roles = Role.find_all_by_active(params[:active])
filters[:sphinx_internal_id] = roles.collect &:person_id
end
Or even better, use the pluck method, which grabs values straight from the
database and doesn't instantiate Role instances:
if params[:active].present?
filters[:sphinx_internal_id] =
Role.find_all_by_active(params[:active]).pluck(:person_id)
end
Cheers
--
Pat
On 13 Feb 2014, at 5:33 am, mamesaye kane <[email protected]> wrote:
> Hi,
>
> When i search active it is not filtering result and doesn't give me error.
> active is a field in another table (roles). rolepid is an array of integer
> with the person ids.
>
> Why is it not returning the 29 records from rolepid array ?
> What am i missing?
>
>
>
> model
> class Person < ActiveRecord::Base
>
> attr_accessible
> :alignment, :description, :first_name, :
> last_name
> has_many
> :roles #table roles with active as one of the field with value equal t or
> f (boolean)
> end
>
>
>
> class Role < ActiveRecord::Base
>
> attr_accessible
> :active, :organization_id, :person_id, :
> position_id
> belongs_to
> :
> person
> belongs_to
> :
> organization
> belongs_to
> :
> position
>
> end
>
> person_index.rb
>
>
> ThinkingSphinx::Index.define :person, :with => :active_record, :delta =>
> true do
>
> #Fields
> indexes last_name, :sortable => true
> indexes first_name, :sortable => true
> indexes alignment
>
> #Attributes
> has created_at, updated_at
> has professions(:id), :as => :profession_ids
> has positions(:id), :as => :position_id
> has organizations(:id), :as => :organization_id
>
> has '6', :as => :model_order, :type => :integer
>
> end
>
>
> people_controller
>
> if params[:active].present?
> role = Array.new
> rolepid = Array.new
> role = Role.find_all_by_active(params[:active])
> role.each do |num|
> rolepid << num.person_id
> end
> end
>
> filters[:id] = rolepid if params[:active].present?
>
> @people = Person.search " #{params[:lastname]} #{params[:firstname]}
> #{params[:alignment]}",
> :with => filters,
> :star => true,
> :condition => { :alignment => params[:alignment], }, #:lastname =>
> params[:lastname], :firstname => params[:firstname],
> :order => 'last_name ASC, first_name ASC',
> :page => params[:page],
> :per_page => 20
>
>
>
>
> --
> 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/groups/opt_out.
--
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/groups/opt_out.