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
endThis is in my Search Controller
#PERSON SEARCH
if 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
end
end