I posted this over on StackOverflow a little while ago and thought I might 
try here as well:

Here is the question. <http://stackoverflow.com/q/13225897/1225765>

I'm working with a old database and drawing blank on how to set up the 
association and index it with Thinking Sphinx. I want to index the People 
and Group's skill.

I have Users. Users can create People and Groups. People and Groups have a 
single skill through Sharing_Skill.

people and groups tables: ID field, Name field

sharings_skills table: ID field, Skill_ID field, Marker_ID(which is the 
person/group_id), Marker_Type ("Group" or "Person")

skills table: ID field, Name field

How do I setup the rails association and index the skills of the person or 
group in the Person model or Group model.

my main goal is to refactor my search by indexing the person skills in the 
person model and searching the name, tags and skills together, instead of 
searching skills, sharing_skills and people separate like this:

This is in my Person model.

class Person < ActiveRecord::Base
  acts_as_taggable
  acts_as_taggable_on :tags

  attr_accessible :name, :tag_list

  validates_presence_of :name

  belongs_to :marker_image, :class_name => "Photo", :foreign_key => 
"marker_image_id"
  belongs_to :user

  extend FriendlyId
  friendly_id :name, use: [:slugged, :history]

  define_index do
    indexes name
    indexes tag_taggings.tag(:name), :as => :tags
    has :id
    has created_at
  end

This is in my Search Controller

#PERSON SEARCHif params[:marker_type].nil? or params[:marker_type].empty? or 
params[:marker_type] == "Person"
  #SEARCH NAME, TAGS, (Need to fix skills)
  conditions = {}
  %w(name tags).each do |i|
    i = i.to_sym
    next unless params[i]
    conditions[i] = params[i]
  end

  person = Person.search_for_ids(params[:search], :conditions => conditions, 
:per_page => 999999)
  if !person.empty?
    person_ids << person
  end

  #SEARCH SKILLS IN PERSON MODEL
  skills = Skill.search_for_ids(params[:search], :per_page => 99999)
  check_skills_available_persons = SharingsSkill.search(:conditions => 
{:marker_type => 'Person'}, :with => {:skill_id => skills}, :per_page => 99999)
  if !check_skills_available_persons.empty?
    check_people_by_skills = Person.search(:with => {:id => 
check_skills_available_persons.collect{|x|x.marker_id}})
    if !check_people_by_skills.empty?
      check_people_by_skills.each do |p_skill|
        person_ids << p_skill.id
      end
    end
  endend

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/thinking-sphinx/-/jZWd6UpjGBoJ.
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