I almost have the associations fixed, although kinda stuck on how to add it 
for groups? I might need to make it a polymorphic association? Also another 
problem is in console if I find a record, person = Person.find(1), I can 
now do person.skills and it lists the skill of that person. But if I do 
person.skills.name it gives me "Skill" and not the actual skill name for 
the person.

person.rb
  has_many :sharing_skills, :foreign_key => "marker_id", :conditions => 
['marker_type = ?', 'Person']
  has_many :skills, :through => :sharing_skills

group.rb
  has_many :sharing_skills, :foreign_key => "marker_id", :conditions => 
['marker_type = ?', 'Group']
  has_many :skills, :through => :sharing_skills

sharing_skill.rb
  belongs_to :marker, :class_name => "Person"
  group?
  belongs_to :skill

skill.rb
  has_many :sharing_skills
  has_many :people, :through => :sharing_skills, :source => :marker
  has_many :groups, :through => :sharing_skills, :source => :marker

On Monday, November 5, 2012 9:20:56 AM UTC-5, Mike C. wrote:
>
> 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/-/b68GQ63OC6sJ.
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