简体   繁体   中英

Problems using Thinking Sphinx in Ruby on Rails with multiple models

I'm developing a website on Ruby on Rails with the search engine Sphinx (I'm using Thinking Sphinx). I have a model in which I want to make the searches and I'm using another models (I made the relationships in the models and in the tables) but I want to make additional INNER JOINS, so, I have something like this:

class Group < ActiveRecord::Base
        belongs_to :person
    has_many :categories, :dependent => :destroy

    define_index do
        indexes group_name
        indexes person.fullnameindexes categories.category_name
        indexes categories.category_name
    end
end

It's ok to make something like this?

class Group < ActiveRecord::Base
        belongs_to :person
    has_many :categories, :dependent => :destroy

    define_index do
        indexes group_name
        indexes person.fullnameindexes categories.category_name
        indexes categories.category_name
        indexes subcategories.subcategory_name #additional table
    end
end

As you can see, I'm adding a new model (Subcategory) that has no relationship with the model Group, but it has a relationship with the model Category, is this ok? or what is the right way to do that?

Those are the links I'm following:

http://freelancing-god.github.com/ts/en/indexing.html
http://freelancing-gods.com/posts/a_concise_guide_to_using_thinking_sphinx

If subcategory is referenced in the Category model, you can do this:

indexes categories.subcategories.subcategory_name, :as => :subcategory_names

Thinking Sphinx will happily go through associations into deeper associations if you want it to.

I think the short answer to this is "no". ThinkingSphinx will try to reference an association on Group named subcategories , which won't exist, and you should get an error when indexing.

If Category has_many :subcategories , you can express this in Group with a :through option:

class Group < ActiveRecord::Base
  belongs_to :person
  has_many :categories, :dependent => :destroy
  has_many :subcategories, :through => :categories

and then the index should recognize the association, though the docs point out that you need an explicit alias when doing this, so:

indexes subcategories.subcategory_name, :as => 'subcategory_name'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM